配置 Jedis 超时

2022-09-03 04:20:30

我在完成一个时遇到问题,这是我尝试过的:.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);

答案 1

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

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

您正在执行的操作是在 中设置 Redis 设置超时。执行 ,意味着 Redis 将在几秒钟后关闭空闲的客户端连接。这就是为什么你在《绝地武士》中遇到例外。JedisCONFIG SET timeout 6060


答案 2

这是对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


推荐