摘抄来自:https://zhuoroger.github.io/

1、slowlog和排队延时

slowlog是排查性能问题关键监控指标。它是记录Redis queries运行时间超时特定阀值的系统。这类慢查询命令被保存到Redis服务器的一个定长队列,最多保存slowlog-max-len(默认128)个慢查询命令。

当慢查询命令达到128个时,新产生的慢查询被加入前,会从队列中删除最旧的慢查询命令。

如MySQL/MongoDB等常见数据库,慢查询的query_time都会包含命令所有耗时,包含锁等待这类时间; 而Redis的慢查询query_time只记录自己“被cpu服务的时间”,不包含排队等待、IO等待(如AOF SYNC)这类时间。在理想状态下,Redis单实例能处理8~10w的QPS, 如果大量的redis命令大量耗时大于1ms, 其实QPS只能达到1000甚于几百。
Redis出现耗时大的命令,导致其他所有请求被阻塞等待,redis处理能力急剧退化,易导致整个服务链雪崩。

用户反应的查询较慢有时候在slowlog查询不到,所以平常不仅要关注slowlog时间,还要关注命令排队时间。

2、redis数据丢失

常见Redis数据丢失的情况

  • 程序bug或人为误操作
  • 因客户端缓冲区内存使用过大,导致大量键被LRU淘汰
  • 主库故障后自动重启,可能导致数据丢失
  • 网络分区的问题,可能导致短时间的写入数据丢失
  • 主从复制数据不一致,发生故障切换后,出现数据丢失
  • 大量过期键,同时被淘汰清理

主库故障后自动重启,可能导致数据丢失:

这种故障发生,极有可能数据全部丢失。

问题发生的现象:时间点T1,主库故障关闭了,因设置有自动重启的守护程序,时间点T2主库被重新拉起,因(T2-T1)时间间隔过小,未达到Redis集群或哨兵的主从切换判断时长;这样从库发现主库runid变了或断开过,会全量同步主库rdb清理,并清理自己的数据。
而为保障性能,Redis主库往往不做数据持久化设置,那么时间点T2启动的主库,很有可能是个空实例(或很久前的rdb文件)。

这种问题发生时间间隔,一般小于1分钟,可能监控告警无法感知到。
这类总是的预防和监控:
1 强烈反对Redis粗暴地设置自动重启
2 这种监控键个数的变化,缓存命中率,同时ELK类型准实时监控redis日志变化并告警

建议:数据库这类重“状态性”服务,不建议程序暴力自动重启

3、待续

redis 问题记录的更多相关文章

  1. redis 学习记录

    http://www.yiibai.com/redis/redis_quick_guide.html Redis 是一款依据BSD开源协议发行的高性能Key-Value存储系统(cache and s ...

  2. CentOS 6.5下Redis安装记录

    Redis简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工 ...

  3. Redis使用记录-相关资料汇总

    1 redis在centos上的安装 http://www.cnblogs.com/hanyinglong/p/5036558.html 2 redis在windows上的可视化GUI工具 https ...

  4. Redis学习记录(一)

    在学习Redis之前,要知道什么是NoSQL? 1.NoSQL 1.1. 什么是NoSQL NoSQL(NoSQL = Not Only SQL),表示“不仅仅是SQL”,泛指非关系型数据库. 1.2 ...

  5. Redis学习记录

    参考资料: http://www.dengshenyu.com/%E5%90%8E%E7%AB%AF%E6%8A%80%E6%9C%AF/2016/01/09/redis-reactor-patter ...

  6. redis安装记录

    下载redishttps://redis.io/    下载 3.2.6版本 ,上传到服务器 . 解压tar -zxvf redis-3.2.6 .tar.gz 修改配置文件(修改redis.conf ...

  7. 习课的redis配置记录

    <!-- redis begin --> <dependency> <groupId>redis.clients</groupId> <artif ...

  8. Redis学习记录之————微博项目

    Key设计 全局相关的key: 表名 global 列名 操作 备注 Global:userid incr 产生全局的userid Global:postid Incr 产生全局的postid 用户相 ...

  9. Redis学习记录之Java中的初步使用

    1.关于Redis redis下载地址:<span style="font-family: Arial, Helvetica, sans-serif;">http:// ...

随机推荐

  1. Layer Trees Reflect Different Aspects of the Animation State

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/CoreA ...

  2. BZOJ1797:[AHOI2009]最小割(最小割)

    Description A,B两个国家正在交战,其中A国的物资运输网中有N个中转站,M条单向道路.设其中第i (1≤i≤M)条道路连接了vi,ui两个中转站,那么中转站vi可以通过该道路到达ui中转站 ...

  3. 【[JLOI2011]飞行路线】

    据说这是分层图最短路的板子题 但其实就是一个\(dij\)多带了一维状态 我们看到\(k\)很小所以显然我们可以设计一个这样的状态 \(d[v][k]\)表示从起点到点\(v\)免费走了\(k\)条路 ...

  4. [LuoguP3195] [HNOI2008]玩具装箱TOY

    [HNOI2008]玩具装箱(Link) 题目描述 \(P\)教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊 ...

  5. 《Linux 学习》01---redis安装, 并使用Redis Desktop Manager 连接

    一.环境简介: linux 系统:centos 7.X 二.安装大纲: 1.下载安装包 2.安装 3.统一管理redis 配置文件 4.编辑redis配置文件,设置常用的功能 5.(1)命令启动,连接 ...

  6. Shader Optimization Tips

    Author : http://www.cnblogs.com/open-coder/p/3982999.html During the last few months, I have been wo ...

  7. Swift_下标

    Swift_下标 点击查看源码 func testSubscripts() { //下标关键字subscript //array测试 struct TestArray { //内部数组 var arr ...

  8. tomcat如何配置俩个版本

    Java-web除了JDK,还需配置服务器(tomcat); 如何配置俩个版本的tomcat; 1.将tomcat-bin目录下的startup.bat和catalina.bat里的%CATALINA ...

  9. 20181.5IDEAx64位授权码

    转载于:https://blog.csdn.net/q258523454/article/details/79775092 2DZ8RPRSBU-eyJsaWNlbnNlSWQiOiIyRFo4UlB ...

  10. angularjs中控制器之间的通信----$on、$emit和$broadcast解析

    $on.$emit和$broadcast使得event.data在controller之间的传递变的简单. $emit只能向parent controller传递event与data $broadca ...