【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost

问题情形

当在执行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

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

原文地址:https://www.cnblogs.com/lulight/p/13568333.html