本文主要是介绍invalid stream header: 76616C75,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
java 项目操作redis ,有如下三种方式
- 使用 原生的 Jedis
- 使用 StringRedisTemplate
- 使用 RedisTemplate<Object,Object>
但是他们并不是通用的,存取操作都涉及到 key value 的序列化和反序列化规则,
使用 Jedis 设置的key 再使用 StringRedisTemplate 进行get 是可以获取成功的,但是使用 RedisTemplate<Object,Object>
就会报错 org.springframework.data.redis.serializer.SerializationException: Cannot deserialize; nested exception is org.springframework.core.serializer.support.SerializationFailedException: Failed to deserialize payload. Is the byte array a result of corresponding serialization for DefaultDeserializer?; nested exception is java.io.StreamCorruptedException: invalid stream header: 76616C75] with root cause,
key 的序列化规则不一样就会报错,
可以复制下面这段代码试一下
@Autowiredprivate Jedis jedis;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Autowiredprivate RedisTemplate redisTemplate;@RequestMapping("/testRedis")@ResponseBodypublic Object testRedis(){String setex = jedis.setex("test1", 5, "value1");String test1 = stringRedisTemplate.opsForValue().get("test1");System.out.println(test1);Object test11 = redisTemplate.opsForValue().get("test1");System.out.println(test11);jedis.close();return test11;}
代码执行到 redisTemplate.opsForValue().get("test1"); 就会报错,
jedis 和 StringRedisTemplate 可以通用是因为 key value 序列化规则一样。
StringRedisTemplate 继承 RedisTemplate<String, String> ,如果 RedisTemplate 设置了序列化规则都是 String 也是可以通用的
这篇关于invalid stream header: 76616C75的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!