rdis连接超时问题分析

发现系统后台日志频繁报错redis超时:
redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out

问题分析:
1.首先根据后台打印的异常堆栈信息找到报错的业务代码位置,发现是redis缓存使用
然后去redsi设置日志存储到文件,方便后续看redis日志

设置redis日志存储到文件

redis集群超时时间 redis超时怎么处理_redis


2.再通过查看redis日志发现没有异常信息

3.使用redis客户端Redis Desktop Manager查看慢查询存储的信息

redis慢查询配置(redis2.2.12以上版本)

参考:

首先设置阈值(20000微秒):

设置:config set slowlog-log-slower-than 20000 查看:config get slowlog-log-slower-than

再设置存储的列表大小(1000):

设置:config set slowlog-max-len 1000

查看:config get slowlog-max-len

将配置持久化到本地配置文件(如果设置命令带config就自动保存到文件里面了):config rewrite

查看当前慢查询列表大小:slowlog len

使用命令查看慢查询信息:slowlog get [n] 如:slowlog get 128 (返回128个慢查询信息)

清理当前慢查询列表:slowlog reset

redis集群超时时间 redis超时怎么处理_redis集群超时时间_02


解释

1)表示当前slow log的唯一标识(只会在redis重启后才会被重置)

2)处理完命令后的,Unix时间戳

3)执行命令所需的时间,单位微秒

4)执行的具体命令

PS:4.0后又6个字段,参考网上信息给出解释:
1)第一个字段是每个慢查询唯一标识(每个慢查询实体的ID都是唯一的,而且不会被重新设置,只会在redis重启后才会被重置);
2)处理完命令后的,Unix 时间戳;
3)执行命令所需要的时间,单位微秒;
4)命令的参数列表,是个数组类型;
5)发起请求的客户端IP和端口;
6)客户端的名称(通过client setname client1 设置的客户端的名称)。

3.经过分析代码保存得内容以及使用redis客户端Redis Desktop Manager 分析保存得数据发现可能是大key(指的就是存储的value太大)问题导致

4.关于大key值解决方案有两种:
参考:https://www.pianshen.com/article/10611533780/
a.根据存储的结构拆分多个key-value值
b.根据存储的数量拆分多个key-value值

附件:redis 客户端工具
链接:https://pan.baidu.com/s/1mAgAUjuFZDcYNwwCQOmwKw
提取码:2vlh