redis在java中设置了缓存值为什么在redis-cli获取不到

redis | 2019-09-13 10:02:39

我的java程序设置了缓存值(RedisTemplate方式),我去redis-cli get取不到,可是我在java端获取又能获取到。

然后redis-cli执行:keys *

1) "\xac\xed\x00\x05t\x00\x04name"
2) "a"
3) "siteName"
4) "\xac\xed\x00\x05t\x00\bsiteName"
5) "myCache::userName"

发现,redis-cli端设置上的值是正常的,但是java端设置的值前面都又特殊字符串:\xac\xed\x00\x05t\x00。

原因就是:RedisTemplate<K, V>模板类在操作redis时默认使用JdkSerializationRedisSerializer来进行序列化。


解决方法:所以我们需要修改默认的序列化方式:

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;
}


登录后即可回复 登录 | 注册
    
关注编程学问公众号