首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置Jedis超时

配置Jedis超时
EN

Stack Overflow用户
提问于 2013-02-21 10:37:06
回答 3查看 61.8K关注 0票数 15

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

代码语言:javascript
复制
Jedis jedis = new Jedis(REDIS_MASTER_NODE);
jedis.connect();
jedis.configSet("timeout", "30");

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

下面是我得到的结果:

代码语言:javascript
复制
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)

这就解决了这个问题:

代码语言:javascript
复制
Jedis jedis = new Jedis(REDIS_MASTER_NODE, 6379, 1800);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-21 19:12:43

如果你想要做的是设置Jedis连接timeout,你应该使用专门的构造函数来完成:

代码语言:javascript
复制
public Jedis(final String host, final int port, final int timeout)

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

票数 22
EN

Stack Overflow用户

发布于 2015-02-12 08:10:28

这是xetorthio的答案的一个扩展,但这里是用于JedisPool的类似方法。(警告:这是基于我直接查看Jedis版本2.6.2代码的理解,并未在实际用例中进行测试。)

代码语言:javascript
复制
    JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
    jedisPoolConfig.setMaxWaitMillis(writeTimeout);
    JedisPool pool = new JedisPool(jedisPoolConfig, redisHost, port, readTimeout);

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

为池构造函数指定的readTimeout是套接字读取的等待时间,有关更多详细信息,请参见java.net.Socket.setSoTimeout

票数 11
EN

Stack Overflow用户

发布于 2016-07-15 03:34:23

需要考虑的几件事:

  1. 对于Jedis和JedisPool类,超时以毫秒为单位。默认超时,至少在2.5.1中是2000 (毫秒):根据this文档,Redis2.6或更高版本的int redis.clients.jedis.Protocol.DEFAULT_TIMEOUT = 2000 [0x7d0]
  2. As不会关闭连接,即使客户端是空闲的。我还没有验证这一点,我会在验证后尝试更新这篇文章。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14993644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档