码迷,mamicode.com
首页 > 其他好文 > 详细

RedisTemplate: Failed to deserialize payload

时间:2019-12-13 22:04:44      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:code   jpg   operation   turn   影响   import   mit   fuse   string   

技术图片


问题

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.EOFException
at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:42)
at org.springframework.data.redis.core.AbstractOperations.deserializeValue(AbstractOperations.java:274)

原因分析

在使用org.springframework.data.redis.core.RedisTemplate.boundHashOps的increment方法后,调用其entries方法反序列化时出错。
主要是因为当执行increment方法时,对于入参中的hashVal没有进行序列化,直接调用了redis方法,当获取值时,走了默认的org.springframework.data.redis.serializer.JdkSerializationRedisSerializer,反序列化失败。
解决办法就是将HashValue的序列化方法改为org.springframework.data.redis.serializer.StringRedisSerializer,问题解决!

但是也相应的引入新的问题:所有的HashValue都会受到影响,值都必须为String。所幸Redis底层存储的值都是字符串,所以也无伤大雅。

解决办法

@Configuration
public class LimitRedisConfig {
    @Bean
    public RedisTemplate<Object, Object> limitRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        return redisTemplate;
    }
}

技术图片

RedisTemplate: Failed to deserialize payload

标签:code   jpg   operation   turn   影响   import   mit   fuse   string   

原文地址:https://www.cnblogs.com/clawhub/p/12037299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!