当前位置: 首页 > 知识库问答 >
问题:

反序列化Spring Data Redis with Lettuce的问题

孔斌
2023-03-14
@Bean
public RedisTemplate<String, Object> redisTemplate() {
    RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
    redisTemplate.setConnectionFactory(redisConnectionFactory());
    redisTemplate.setEnableTransactionSupport(true);
    redisTemplate.setKeySerializer(new StringRedisSerializer());
    redisTemplate.sethashKeySerializer(new StringRedisSerializer);
    return redisTemplate;
}
public class ObservableRedisStateChecker implements Runnable {
    ...
    public void run() {
       try {
           Thread.sleep(3000);
           redisTemplate.opfForValue().get("validation");
           notifyObservers(true);
       } catch (Exception e) {
           noifyObservers(false);  // meaning that the Redis' state isn't fine.
       }
    ...
}
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

奇怪的是,当我启动一个简单的测试应用程序,它在同一主机上运行与上述验证代码非常相同的代码时,错误发生了,而当错误发生时,测试应用程序却说没有错误。该错误只是发生在web应用程序上。
测试代码如下:

...
ExecutorService es = Executors.newCachedThreadPool()
RedisTemplate<String, Obejct> redisTemplate = ...

es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
es.submit(new RedisValidationCheckTest(redisTemplate));
...

怎么了?

共有1个答案

韦寒
2023-03-14

好像是连载问题。

您没有为值设置反序列化程序。所以redis使用了默认的Serializaer:JdkSerializationRedisSerializer,这一点也不好。我推荐使用Jackson或仅使用StringRedisserializer。

可能是由于网络问题,它收到一些不完整的响应,jdk反序列化器无法识别它并进行投诉。将此添加到您的配置中

Redistemplate.opfForValue().Get(“验证”);

Redistemplate.GetConnectionFactory().GetConnection().Ping()

 类似资料:
  • 好的,我做了更改,下面是我得到的JSON响应 它现在导致一个嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配 NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalArgumentException:参数类型不匹配org.springframework.web.servlet.framework.ser

  • 问题内容: 每当我尝试序列化文件时,都会收到错误消息:FileNotFound。不知道为什么。这是我的FileHelper代码: 问题答案:

  • 问题内容: 我有以下JSON片段: 全部在一个行版本中(适用于字符串文字): 在上述例子中,,,和被需要的,但是和是可选的。 这是我要反序列化的课程: 这是我用来反序列化的代码: 除此以外,一切都进行得相当顺利,并且第一次通过时都是空的。我曾尝试一切在阳光下,试图让他们填充:自定义类,,,无论是后者,和所有其他的集合,似乎适用的。[编辑:我忘记尝试了,这似乎是显而易见的候选人。没用。] 这个问题,

  • 目前,我正在使用Avro1.8.0序列化/反序列化对象,但面临一些问题,特别是java.util.Map对象。不面临其他类型对象的问题。 这里的示例代码- 在deserialize方法中,我试图根据输入数据获取模式,但avro抛出错误- 多谢了。

  • null Spring Boot 1.3.1 Jackson 2.6.4(包含JSR310模块) 这需要自定义反序列化类吗?

  • 谷歌要求设计一个算法来序列化和反序列化二叉树。我在网上找到了一个解决方案。我不太理解的部分是为什么在第20行需要这个条件,其中“if node==None:”,self。根=节点(值)?因为毕竟,该程序将提示用户以例如:1,3,5的形式输入节点,以便程序工作,因此不会出现节点=无的情况,因为用户输入是必要的?我是不是误解了什么?

  • 我有以下几个类,我想使用Jackson反序列化JSON字符串。 PushNotificationMessage.java 设备信息。Java语言 IOSDeviceInfo。Java语言 WebDeviceInfo.java 我有以下要反序列化的JSON内容: 我只需使用ObjectMapper来尝试执行反序列化。 当我这样做时,我得到: com.fasterxml.jackson.databin