RedisTemplate序列化方式导致的get(key)拿不到值,存入key乱码问题

前言说明

笔者所在的项目中,有两个服务之间需要使用redis实现通信,及一个服务存入(key,value),另一个服务get(key)实现通信。使用过程中发现redis通信存在问题,最终重写RedisTemplate序列化方式后问题得到解决。

现象描述

  • 服务A通过RedisTemplate.opsForValue().set()存入key,在服务B中RedisTemplate.opsForValue().get(key),没能获取到任何内容,日志打印两服务中的key,发现两服务key值没有问题。
  • 服务A使用RedisTemplate.opsForList().leftPushAll(QUEUEKEY,queueValueList)往队列中添加对象,使用redis管理工具,查看到redis中实际存储的queueValue,被加上了一些特殊字符,如\xac\xed\x00\x05t\x00\queueValue1

问题分析

通过现象二,发现写入redis的值被转码了,通过查看RedisTemplate源码,知道RedisTemplate默认序列化方式:org.springframework.data.redis.serializer.JdkSerializationRedisSerializer

	@Override
	public byte[] serialize(@Nullable Object object) {
   
		if (object == null) {
   
			return SerializationUtils.EMPTY_ARRAY;
		}
		try {
   
			return serializer.convert(object);
		} catch (Exception ex) 

你可能感兴趣的:(经验积累,redis,缓存,java)