Spring Data Redis的GenericJackson2JsonRedisSerializer序列化器“失效”/“不起作用”问题
我们在初学Spring Data Redis时,肯定会遇到一个问题,就是他的序列化问题。当我们不指定序列化器时,默认Key、Value、HashKey、HashValue的序列化器都是null,然后会调用JdkSerializationRedisSerializer类来进行序列化。一般情况下,我们都不会使用默认的JDK序列化器,而是指定别的序列化器来使用。指定序列化器:@Configuration
·
我们在初学Spring Data Redis时,肯定会遇到一个问题,就是他的序列化问题。当我们不指定序列化器时,默认Key、Value、HashKey、HashValue的序列化器都是null,然后会调用JdkSerializationRedisSerializer类来进行序列化。一般情况下,我们都不会使用默认的JDK序列化器,而是指定别的序列化器来使用。
指定序列化器:
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory connectionFactory) {
// 创建Template
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// 设置连接工厂
redisTemplate.setConnectionFactory(connectionFactory);
// 创建序列化工具
GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// key和 hashKey采用 string序列化
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setHashKeySerializer(RedisSerializer.string());
// value和 hashValue采用 JSON序列化
redisTemplate.setValueSerializer(jsonRedisSerializer);
redisTemplate.setHashValueSerializer(jsonRedisSerializer);
// 返回redisTemplate
return redisTemplate;
}
}
对Redis进行操作:
@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void contextLoads() {
redisTemplate.opsForValue().set("name","某某某");
}
}
在Redis命令行客户端中查看结果:
此时看起来是一堆乱码,会让初学者觉得指定的序列化器没有生效(PS:就是我这个倒霉蛋),还是在使用默认的序列化器。那这到底是为什么呢?指定的序列化器真的没有生效么?
其实已经生效了,只是因为redis存入中文默认是16进制 当你直接在redis命令行客户端查看的时候其实不是乱码,只是redis把中文字符串转为了16进制。我们想要直接看到中文可以使用redis-cli --raw命令,来强制正常显示中文。
如图:
更多推荐
已为社区贡献2条内容
所有评论(0)