1.4K Star 5K Fork 1.7K

GVP红薯 / J2Cache

 / 详情

key超时销毁后 lettuce再次连接报错

待办的
创建于  
2019-03-28 16:03

二级缓存用lettuce,当redis key超时销毁后,通过cache.exist 判断key是否存在,提示出错

java.io.IOException: 远程主机强迫关闭了一个现有的连接。
        at sun.nio.ch.SocketDispatcher.read0(Native Method)
	at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43)
	at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223)
	at sun.nio.ch.IOUtil.read(IOUtil.java:192)
	at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380)
 io.lettuce.core.RedisException: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
	at io.lettuce.core.LettuceFutures.awaitOrCancel(LettuceFutures.java:132)
	at io.lettuce.core.FutureSyncInvocationHandler.handleInvocation(FutureSyncInvocationHandler.java:69)
	at io.lettuce.core.internal.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:80)
	at com.sun.proxy.$Proxy117.get(Unknown Source)
	at sun.reflect.GeneratedMethodAccessor414.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:45005)
	at java.lang.reflect.Method.invoke(Method.java:498)

刚开始以为是连接超时,lettuce.timeout设置30s也没用,所以应该不是连接超时的问题
代码如下:

CacheChannel cache = J2Cache.getChannel();
System.out.println(cache.check("aaa", "bbb"));

key超时销毁后请求报错,再请求一次就正常

评论 (4)

Barry 创建了任务
Barry 修改了描述
Barry 修改了描述
Barry 修改了标题
Barry 修改了描述
展开全部操作日志

这个错误触发条件不是 key 超时消费。而是 redis 的连接被服务端断开了

@红薯 应该还是key超时销毁的原因,我有2个key,bbb,ccc,都超时销毁,这个时候我请求ccc这个key,第一次请求失败,第二次请求正常,这个时候我再请求bbb这个key,还是第一次失败,第二次正常,如果是redis连接被断开,再请求ccc成功的那一次说明redis连接成功,这个时候在请求bbb不应该还是失败的

key 超时是因为连接被断了

@红薯 key超时销毁是因为ttl到达预先设置的值,不会出现ttl还没到时间连接断开,但是过了设置的超时时间,再去请求key,每一个key都会出现第一次请求失败,第二次请求成功

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
36 ld 1578913711
Java
1
https://gitee.com/ld/J2Cache.git
git@gitee.com:ld/J2Cache.git
ld
J2Cache
J2Cache

搜索帮助