spring boot中使用redis,好方便,但是有个问题,默认使用JdkSerializationRedisSerializer来序列化,缓存肯定是要序列化的,但是默认的序列化会有个问题,java端存完了,取redis-cli执行:key * ,会发现键值都带有\xac\xed\x00\x05t\x00这种字符,这问题就大了,集群的话,别的机器不认识啊,所以需要修改序列化方式。
一般我们都会用RedisTemplate写个redis的工具类RedisUtils
修改之前:
@Component public class RedisUtils { @Resource private RedisTemplate<String, Object> redisTemplate; 。。。。省略下面的方法直接调用redisTemplate 操作 }
修改之后:
@Component public class RedisUtils { private RedisTemplate<String, Object> redisTemplate; /** * 解决序列化不一致的问题 * @param 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; } 。。。。省略下面的方法直接调用redisTemplate 操作 }
就是这么简单,@Autowired会自动注入redisTemplate,并在类加载后执行一下。