invalid stream header: 76616C75

java 项目操作redis ,有如下三种方式

  1.  使用 原生的 Jedis
  2.  使用 StringRedisTemplate
  3.  使用 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 的序列化规则不一样就会报错,

可以复制下面这段代码试一下

    @Autowired
    private Jedis jedis;
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Autowired
    private RedisTemplate redisTemplate;

    @RequestMapping("/testRedis")
    @ResponseBody
    public 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 也是可以通用的

 
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值