公司的项目采用了redis作为缓存使用,以前没有太关注序列化的时候,key和value的都是采用默认的序列化方式,后来有一次为了方便线上查找问题方便定位到具体缓存内容,才发现使用的默认序列化方式,只能通过命令获取,而且还获取不到,因为key被字节话了,所以统一修改的key的序列化方式为字符串,通过@PostConstruct注解,设置了序列化方式,当时测试都没有问题了。配置方法如下:
@PostConstruct
public void setRedisConfig() {
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
}
经过一段时间,有一次开发过程中通过可视化客户端工具查看开发环境的redis库的时候,发现又出现了字节话序列的key了,但是部分是好的,部分是坏的,很奇怪。通过多次排查发现了问题所在,原来因为业务需求,需要在项目启动的时候,默认从数据库读取一些系统常用配置到缓存,所以也通过@PostConstruct注解来进行,但是大家都是通过注解来进行的,而且这个注解没有参数来控制它的优先级,所以一部分的key在配置生效前就进了缓存,这时的key就是乱码了。