Redis-客户端的常见异常
1.无法从连接池中获取连接JedisPool中的Jedis对象的个数是有限的,默认是8个,在超过maxWaitMills时间内仍然无法获取则会抛出异常JedisConnectionException:could not get a resource from the pool.....Timeout waiting for idle object。如果设置了blockWhenExhausted=f
1.无法从连接池中获取连接
JedisPool中的Jedis对象的个数是有限的,默认是8个,在超过maxWaitMills时间内仍然无法获取则会抛出异常JedisConnectionException:could not get a resource from the pool.....Timeout waiting for idle object。
如果设置了blockWhenExhausted=false,则会立即抛出异常不会进行等待,Pool exhausted
原因分析:
1.客户端:高并发下连接池设置过小,一般情况下比默认值8设置的稍微大一些就可以,JedisPool的处理效率足够高。
2.客户端:没有正确的使用连接池,比如没有释放。
3.客户端:存在慢查询操作,导致这些持有的Jedis对象归还的速度比较慢,造成池子满了。
4.服务端:Redis的服务端由于一些原因造成客户端命令执行的阻塞
2.客户端写超时
Read time out 读写超时
原因分析:
1.读写超时时间设置的过短
2.命令本身执行的就比较慢
3.客户端与服务端网络不正常
4.Redis自身发生阻塞
3.客户端链接超时
connect time out
原因分析:
1.链接超时设置的过短,jedis.getClient.setConnectionTimeOut()进行设置
2.Redis 发生阻塞,造成tcp-backlog已满,造成新的链接失败。
3.网络不正常
4.客户端缓冲区异常
Jedis咋调用Redis客户端的时候,如果出现客户端数据流异常:Unexpected end of stream
原因分析:
1.输出缓冲区满了,使用get命令获取一个BigKey大于缓冲区的大小就会抛出如上异常
2.长时间闲置的链接被服务端主动断开
3.不正常的并发读写,Jedis对象同事被多个线程并发操作
5.Lua脚本正在执行
Redis正在执行Lua脚本,并且超过了lua-time-limit,抛出BUSY redis is busy running a script
6.Redis正在加载持久化文件
Jedis调用Redis的时候,如果正在加载持久化文件,抛出LOADING redis is loading the dataset in memory
7.Redis使用的内存超过了maxmemory的设置
抛出OOM commad not allowed when used memory > macMemory
8.客户端连接数过大
客户端连接数超过了maxClients,新申请的链接会出现以下异常:ERR max number of clients reached
原因分析:
1.客户端:下线部分应用节点,先让Redis的连接数降下来,保证部分节点正常运行
2.服务端:对异常的节点做故障转移
更多推荐
所有评论(0)