配置 Jedis 超时

新手上路,请多包涵

我在完成 .hgetall() 时遇到问题,这是我尝试过的:

 Jedis jedis = new Jedis(REDIS_MASTER_NODE);
jedis.connect();
jedis.configSet("timeout", "30");

Map<String, String> alreadyStored = jedis.hgetAll(redisTargetHash);

这是我得到的:

 Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
    at redis.clients.jedis.Protocol.process(Protocol.java:79)
    at redis.clients.jedis.Protocol.read(Protocol.java:131)
    at redis.clients.jedis.Connection.getBinaryMultiBulkReply(Connection.java:199)
    at redis.clients.jedis.Jedis.hgetAll(Jedis.java:851)

这解决了这个问题:

 Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800);

原文由 dranxo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

如果你想做的是设置 Jedis 连接 timeout ,你应该使用为此制作的特殊构造函数来完成:

 public Jedis(final String host, final int port, final int timeout)

您正在做的是从 Jedis 设置 Redis 设置的 _超时_。执行 CONFIG SET timeout 60 ,意味着 Redis 将在 60 秒后关闭 空闲 客户端连接。这就是为什么你在绝地武士中得到例外。

原文由 xetorthio 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是对 xetorthio 的答案的一些扩展,但这里是与 JedisPool 一起使用的类似方法。 (注意:这是基于我直接查看 Jedis 2.6.2 版代码的理解,尚未在实际用例中进行测试。)

     JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxWaitMillis(writeTimeout);
    JedisPool pool = new JedisPool(jedisPoolConfig, redisHost, port, readTimeout);

writeTimeout 是池中 Jedis 资源等待写入操作的最长时间。

为池构造函数指定的 readTimeout 是套接字读取的等待时间,请参阅 java.net.Socket.setSoTimeout 了解更多具体细节。

原文由 Paul-59701 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题