问题:遇到异常:org.redisson.client.RedisTimeoutException: Redis server response timeout (3000 ms) occured for command....
环境:在基于spring MVC的web开发环境中,通过@bean得到一个RedissonClient实例redisson。当request请求到达后,在controller中总是使用该实例读取一个map对象:
RMapCache<String, String> mapCache = redisson.getMapCache("userMap");
并操纵它:
mapCache.containsKey(user.getName());
mapCache.put(user.getName(),user.getPhone(),20, TimeUnit.SECONDS);
复现:当整个web应用刚启动不久,去浏览器访问该web应用是没有问题的,一切正常(上述对Redis的读写正常),但是当没有任何对web的访问,比如30分钟后,再来访问(触发上述的对Redis的读写),就几乎肯定会出现异常,且该异常只有重启web应用后才能恢复正常。(Redis服务器,网络都是正常状态)。
是否有解决方案?(另外该问题我用jedis 也遇到了,以为用redission可以解决这个问题,但发现都存在该现象,不知道如何解决)
我看过关于FAQ中关于timeout的描述,没能解决。
使用wireshark抓包看故障发生时的6379端口上的通讯交互大概是这样的:
(这里不能上图好像)
- 先是给Redis服务器发送一个PSH,跟着几个自动的TCP Retransmission(显然这应该是很早之前建立的连接)
- 重新发起一个TCP连接(3路握手),并且握手成功,PSH了37个字节的数据,并收到Redis服务器的5个字节的TCP应答数据。
- 16秒后随后是彼此双方的维持连接的ACK,持续下去(随后是TCP dup ACK,满屏黑)
问题:遇到异常:org.redisson.client.RedisTimeoutException: Redis server response timeout (3000 ms) occured for command....
环境:在基于spring MVC的web开发环境中,通过@bean得到一个RedissonClient实例redisson。当request请求到达后,在controller中总是使用该实例读取一个map对象:
RMapCache<String, String> mapCache = redisson.getMapCache("userMap");
并操纵它:
mapCache.containsKey(user.getName());
mapCache.put(user.getName(),user.getPhone(),20, TimeUnit.SECONDS);
复现:当整个web应用刚启动不久,去浏览器访问该web应用是没有问题的,一切正常(上述对Redis的读写正常),但是当没有任何对web的访问,比如30分钟后,再来访问(触发上述的对Redis的读写),就几乎肯定会出现异常,且该异常只有重启web应用后才能恢复正常。(Redis服务器,网络都是正常状态)。
是否有解决方案?(另外该问题我用jedis 也遇到了,以为用redission可以解决这个问题,但发现都存在该现象,不知道如何解决)
我看过关于FAQ中关于timeout的描述,没能解决。
使用wireshark抓包看故障发生时的6379端口上的通讯交互大概是这样的:
(这里不能上图好像)