redis读数据超时问题查询

原创 2016年08月30日 14:51:52
一、Redis超时问题排查

客户端设置了超时时间为200ms, 应用端反馈超时情况,并提供的超时日志。

逐个排查:
1. Redis慢查询:并没有发现慢查询
2. Redis日志:没有什么异常,也没什么RDB和AOF重写
3. 机器:观察cpu,内存,网络,负载,本地IO都正常
4. 唯一以前怀疑的是网络,按理说这个流量也不是很大,进行简单分析。

redis-cli
redis-cli是个比较好的方法来测redis的延迟,为此我们用下面的api来测试,发现会出现200ms的情况。

具体原因猜测:机房之间的带宽有限,据说只有50M,这台机器本身流量就有点大而且是台虚机。
./redis-cli --latency-history -h 192.168.9.39 -p 6379
min: 0, max: 1, avg: 0.07 (1480 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.06 (1481 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.07 (1479 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.07 (1480 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.07 (1480 samples) -- 15.00 seconds range
min: 0, max: 2, avg: 0.09 (1480 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.07 (1481 samples) -- 15.01 seconds range
min: 0, max: 5, avg: 0.07 (1480 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.07 (1479 samples) -- 15.00 seconds range
min: 0, max: 10, avg: 0.07 (1480 samples) -- 15.01 seconds range
min: 0, max: 7, avg: 0.07 (1480 samples) -- 15.00 seconds range
min: 0, max: 10, avg: 0.08 (1479 samples) -- 15.01 seconds range
min: 0, max: 2, avg: 0.07 (1481 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.07 (1480 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.07 (1480 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.07 (1480 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.06 (1481 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.06 (1480 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.06 (1480 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.08 (1480 samples) -- 15.01 seconds range
min: 0, max: 10, avg: 0.08 (1479 samples) -- 15.00 seconds range
min: 0, max: 202, avg: 0.68 (1277 samples) -- 15.01 seconds range  
min: 0, max: 7, avg: 0.07 (1480 samples) -- 15.01 seconds range
min: 0, max: 9, avg: 0.08 (1480 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.06 (1481 samples) -- 15.01 seconds range

总结:
以上就是查询超时的基本思路,分配机器要考虑流量的合理性,注意网络通信稳定性。


二、慢日志说明

Slowlog

命令用于读取和重新设置redis慢查询日志.
概述

redis 慢查询日志, 是系统记录那些超过指定查询时间的日志. 执行的时间不包括和客户端的IO操作,和响应时间等, 而只是实际redis执行命令的时间(只是线程执行命令时,阻塞不能在接受处理其他请求花费的时间)

慢查询日志有两个参数:
  1.     slowlog-log-slower-than: 单位微妙,指定redis执行命令的最大时间,超过将记录到慢查询日志中,不接受负值,如果设置为0,每条命令都要记录到慢查询日志中.
  2.     slowlog-max-len: 设置慢查询日志长度,如果慢查询日志已经到最大值,如果有新命令需要记录,就将最老那条记录删除.
读取慢查询日志

慢查询日志是会存储在内存中, 没有文件存储慢查询日志内容. 所以在获取慢查询日志时候,会响应非常快. 对性能影响很小.

获取慢查询日志可以使用 slowlog get 命令, 将会所有的慢查询记录. 获取指定数量的慢查询使用:

slowlog get N
实例
redis 127.0.0.1:6379> slowlog get 2
1) 1) (integer) 439
   2) (integer) 1472526432
   3) (integer) 258198
   4) 1) "KEYS"
      2) "uploadFile_*"
2) 1) (integer) 438
   2) (integer) 1472526385
   3) (integer) 259900
   4) 1) "KEYS"
      2) "uploadFile_*"

slowlog get 返回值说明

返回的每个慢查询实体,都由四个字段组成
  •     第一个字段是每个慢查询唯一标识。
  •     处理完命令后的,Unix 时间戳
  •     执行改名了所需要的时间,单位微妙
  •     命令的参数列表,是个数组类型
每个慢查询实体的ID都是唯一的,而且不会被重新设置,只会在redis重启后才会重置它.
查看当前慢查询日志长度

Slowlog len
清空慢查询日志内容

SLOWLOG RESET


参考文档:
Redis 响应延迟问题排查
http://www.oschina.net/translate/redis-latency-problems-troubleshooting
记一次Redis超时排查
http://carlosfu.iteye.com/blog/2275659
美团在Redis上踩过的一些坑-1.客户端周期性出现connect timeout
http://carlosfu.iteye.com/blog/2254566
版权声明:原创文章,欢迎转载但请备注来源及原文链接

redis 下载启动,设置、查询超时时间

http://www.cnblogs.com/0201zcr/p/5084849.html 1、定义   redis是一个key-value存储系统。和Memcached类似,它支...
  • zdy0_2004
  • zdy0_2004
  • 2015年12月29日 11:57
  • 3276

redis超时问题分析

1. 如果redis和java在同一台服务器上,通过unix socket连接即可 2. redis和应用如果不在同一台服务器上,必须使用长连接,否则只要连接一多,就会出现连接不上的情况(timeo...
  • jueshengtianya
  • jueshengtianya
  • 2016年01月29日 16:18
  • 2460

Redis高级功能 - 慢查询日志

Redis 提供了5种数据结构,但除此之外, Redis 还提供了注入慢查询分析, Redis Shell 、 Pipeline 、事务、与 Lua 脚本、 Bitmaps 、 HyperLogLog...
  • luyaran
  • luyaran
  • 2017年06月27日 16:27
  • 1541

redis远程连接超时

用jedis连接远程的redis时,抛出连接超时异常:connect timed out。
  • duwenchao1986
  • duwenchao1986
  • 2014年10月15日 21:03
  • 8158

Tomcat应用报redis超时的故事

redis
  • hezemin0315
  • hezemin0315
  • 2016年09月27日 17:41
  • 1002

[总结]redis连接超时问题排查

连接池无法获取到连接或获取连接超时 redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource ...
  • li396864285
  • li396864285
  • 2017年11月24日 14:32
  • 769

Redis数据操作命令行

一.String数据类型 (1)set key value [ex 秒数] [px 毫秒数] [nx/xx]         如果ex和px同时写,则以后面的有效期为准       nx:如...
  • sunrise_zhu
  • sunrise_zhu
  • 2017年03月28日 17:16
  • 572

redis设置value的超时时间

参考:http://blog.csdn.net/ssergsw/article/details/18319399 Redis的官网(http://redis.io)中是这样描述的:SET k...
  • csdm_admin
  • csdm_admin
  • 2017年04月01日 19:57
  • 5211

Redis 常用命令以及使用事务、设置key超时

Redis 中的事务使用MULTI与EXEC之间之间执行多个操作来处理一个事务:127.0.0.1:6379> MULTI OK 127.0.0.1:6379> SADD key element QU...
  • zixiao217
  • zixiao217
  • 2016年10月08日 16:54
  • 2162

redis代码 数据超时实现

struct redisServer {     /* General */     char *configfile;           /* Absolute config file pat...
  • aalbertini
  • aalbertini
  • 2014年05月14日 11:57
  • 4764
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:redis读数据超时问题查询
举报原因:
原因补充:

(最多只允许输入30个字)