1. 问题描述:使用springboot微服务架构,同事使用了如下进行存储数据:

redisTemplate.opsForValue().set(k, v, 2, TimeUnit.MINUTES);

  我这边统一对所存储的数据进行处理,当通过 redisTemplate.opsForValue().get(k) 获取不到数据时,使用我自己的另外方式发送数据,并存储:redisTemplate.opsForValue().set(k, v1, 2, TimeUnit.MINUTES);

    但我这边存储后,一直未找到存储的k, 后来仔细查找,发现我的k前面出现乱码:\xAC\xED\x00\x05t\x00\x10

2. 问题分析:

   经过比对,同事存储的k是正常,前面没有出现乱码,而我的都会出现乱码。网上有说是:

   redisTemplate 默认的序列化方式为 jdkSerializeable, StringRedisTemplate的默认序列化方式为StringRedisSerializer,需要设定自己的序列化方式。 而且处理方式颇为复杂。

3. 处理方法:

   经过对比发现一个小细节:同事使用redisTemplate时,对key,和value有规定:即

@Autowired private RedisTemplate<String,String> redisTemplate;

而我引用时,没有规定key, value的类型:
@Autowired private RedisTemplate redisTemplate;

   既然问题已经找到,只需将引用方式改为同事的引用方式即可。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐