问题情形

当在执行Redis一直指令时,有可能会遇见如下几种错误:

1) redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

2) redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out

3) JedisTemplate.execute - Redis connection lost.

以上三种错误,在详细的Stack Trace中,其引起的根本异常情况都是  java.net.SocketTimeoutException: Read timed out。 具体原因时在执行指令时候超时。 所以这里要从执行的命令和Redis服务器的Server Load来判断问题。

 

解决办法

修改Jedis的默认超时时间(2秒)。如果执行的命令时KEYS等比较耗时的操作,可以考虑增加到3~5秒为超时时间。但时最好的办法还是不要使用KEYS等命令,根据Redis官方网站的介绍,可以使用SCEN来替换。

修改初始化JedisPool时的Timeout时间。

JedisPool(GenericObjectPoolConfig poolConfig, String host, int port, int timeout)

 

参考资料:

java.net.SocketTimeoutException: Read timed out:https://github.com/xetorthio/jedis/wiki/FAQ#if-you-get-javanetsockettimeoutexception-read-timed-out-exception (如不能访问Github链接,可点击:[Azure Redis]If you get java.net.SocketTimeoutException: Read timed out exception)

KEYS: https://redis.io/commands/keys

SCAN: https://redis.io/commands/scan

 

相关文章:

  • 2021-04-07
  • 2021-09-17
  • 2023-02-03
  • 2021-04-14
  • 2021-08-05
  • 2021-10-24
  • 2021-12-14
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
  • 2021-12-12
  • 2021-10-30
  • 2022-12-23
  • 2021-08-03
相关资源
相似解决方案