springboot redis key乱码

原写法:

@Autowired
private RedisTemplate redisTemplate;

写入redis后发现存入的key为

 解决方法:

private RedisTemplate redisTemplate;

@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
     RedisSerializer stringSerializer = new StringRedisSerializer();
     redisTemplate.setKeySerializer(stringSerializer);
     redisTemplate.setValueSerializer(stringSerializer);
     redisTemplate.setHashKeySerializer(stringSerializer);
     redisTemplate.setHashValueSerializer(stringSerializer);
     this.redisTemplate = redisTemplate;
}

那么在存key的时候为什么会出现这种"乱码"的情况呢?

其实这里的"乱码"并不是真的乱码,那是因为我们还缺少了一点配置,那就是对Redis存key或者value的时候,没有配置字符串序列化。没有配置的话是默认使用jdk本身的序列化的。

因为spring操作redis是在jedis客户端基础上进行的,而jedis客户端与redis交互的时候协议中定义是用byte类型交互,看到spring-data-redis中RedisTemplate在操作的时候k,v是泛型对象,而不是byte[]类型的,这样导致的一个问题就是,如果不对RedisTemplate进行设置,spring会默认采用defaultSerializer = new JdkSerializationRedisSerializer();这个方法来对key、value进行序列化操作,使用默认的jdk序列化。这样子存到Redis里面,在服务器上登陆redis-cli查看key的时候找不到我们存储的那个key,而是加了一堆乱码的key。

参考博文:

https://www.cnblogs.com/janes/p/8796353.html

关于springboot集成redis及关于redis的Key 乱码问题_weixin_34235457的博客-CSDN博客

你可能感兴趣的:(redis,spring,boot,java)