Skip to content

org.redisson.client.RedisTimeoutException #1440

@sosoeo

Description

@sosoeo

问题:遇到异常: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端口上的通讯交互大概是这样的:
(这里不能上图好像)

  1. 先是给Redis服务器发送一个PSH,跟着几个自动的TCP Retransmission(显然这应该是很早之前建立的连接)
  2. 重新发起一个TCP连接(3路握手),并且握手成功,PSH了37个字节的数据,并收到Redis服务器的5个字节的TCP应答数据。
  3. 16秒后随后是彼此双方的维持连接的ACK,持续下去(随后是TCP dup ACK,满屏黑)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions