Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我们尝试使用Jedis客户端通过scan从Redis缓存读取所有密钥时,会引发异常_Java_Redis_Jedis_Spring Data Redis_Lettuce - Fatal编程技术网

Java 当我们尝试使用Jedis客户端通过scan从Redis缓存读取所有密钥时,会引发异常

Java 当我们尝试使用Jedis客户端通过scan从Redis缓存读取所有密钥时,会引发异常,java,redis,jedis,spring-data-redis,lettuce,Java,Redis,Jedis,Spring Data Redis,Lettuce,我们使用RedisTemplate从Redis缓存获取所有密钥。我们正在使用“扫描”获取所有密钥。 我们不直接使用莴苣或绝地武士,我们让他们来做 当我们将RedisTemplate配置为使用莴苣时,scan命令返回所有键。 当我们将RedisTemplate配置为使用绝地武士时,出现了一些问题,我们看到了以下例外情况: 05-20@22:40:01 ERROR ( MyCache.java:58) - Exception org.springframework.data.redi

我们使用RedisTemplate从Redis缓存获取所有密钥。我们正在使用“扫描”获取所有密钥。 我们不直接使用莴苣或绝地武士,我们让他们来做

当我们将RedisTemplate配置为使用莴苣时,scan命令返回所有键。 当我们将RedisTemplate配置为使用绝地武士时,出现了一些问题,我们看到了以下例外情况:

    05-20@22:40:01 ERROR ( MyCache.java:58)     - Exception
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: EFBFBDEF
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:82)
    at test.MyCache.deserializeKeys(MyCache.java:70)
    at test.MyCache.getKeys(MyCache.java:52)
    at test.RedisApp.main(RedisApp.java:54)
Caused by: 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: EFBFBDEF
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:78)
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:36)
    at org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:80)
    ... 3 more
Caused by: java.io.StreamCorruptedException: invalid stream header: EFBFBDEF
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:301)
    at org.springframework.core.ConfigurableObjectInputStream.<init>(ConfigurableObjectInputStream.java:63)
    at org.springframework.core.ConfigurableObjectInputStream.<init>(ConfigurableObjectInputStream.java:49)
    at org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:68)
    at org.springframework.core.serializer.support.DeserializingConverter.convert(DeserializingConverter.java:73)
    ... 5 more
05-20@22:40:01错误(MyCache.java:58)-异常
org.springframework.data.redis.serializer.SerializationException:无法反序列化;嵌套异常为org.springframework.core.serializer.support.SerializationFailedException:未能反序列化负载。字节数组是DefaultDeserializer的相应序列化的结果吗?;嵌套异常为java.io.StreamCorruptedException:无效的流头:EFBFBDEF
位于org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:82)
反序列化键(MyCache.java:70)
在test.MyCache.getKeys(MyCache.java:52)
位于test.RedisApp.main(RedisApp.java:54)
原因:org.springframework.core.serializer.support.SerializationFailedException:未能反序列化负载。字节数组是DefaultDeserializer的相应序列化的结果吗?;嵌套异常为java.io.StreamCorruptedException:无效的流头:EFBFBDEF
位于org.springframework.core.serializer.support.DeserializengConverter.convert(DeserializengConverter.java:78)
位于org.springframework.core.serializer.support.DeserializengConverter.convert(DeserializengConverter.java:36)
位于org.springframework.data.redis.serializer.JdkSerializationRedisSerializer.deserialize(JdkSerializationRedisSerializer.java:80)
... 3个以上
原因:java.io.StreamCorruptedException:无效的流头:EFBFBDEF
位于java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808)
位于java.io.ObjectInputStream。(ObjectInputStream.java:301)
位于org.springframework.core.ConfigurableObjectInputStream。(ConfigurableObjectInputStream.java:63)
位于org.springframework.core.ConfigurableObjectInputStream。(ConfigurableObjectInputStream.java:49)
位于org.springframework.core.serializer.DefaultDeserializer.deserialize(DefaultDeserializer.java:68)
位于org.springframework.core.serializer.support.DeserializengConverter.convert(DeserializengConverter.java:73)
... 还有5个
我们想用一个完整的例子来说明这个问题,所以我们在GitHub上创建了一个示例项目。 该项目使用Java8、Maven(3+)、SpringDataRedis(1.8.3.RELEASE)、莴苣(4.3.1.Final)和绝地(2.9.0)。 该项目使用Redis server 3.2.9进行了测试


所以问题是,为什么只有当我们配置RedisTemplate来使用绝地武士时,我们才能得到这个例外?我们可以做些什么来让绝地武士工作?

似乎你的Redis服务器中有数据,一些密钥的名称中包含
EFBFBDEF
。运行Redis
FLUSHALL
命令擦除Redis数据并重试。情况并非如此。我已将Redis配置为仅在内存中保留条目。每次我重新启动Redis,我都会得到一个新的,没有条目。除此之外,我还将日志级别设置为“debug”,因此我也在观察Redis在日志中写入的内容“0键等”。但是谢谢你的回答。