是谁拖(慢)了 Redis 的后腿?
如果发现 Redis 突然变慢了,那么如何系统性的应对?可以从三个方面考虑:Redis 自身特性、文件系统和操作系统《Redis 核心技术与实战》学习笔记 11,部分已经作为留言发布,但是留言太多,排在后面的一般很难被大家看到,所以集中发布在这里,欢迎讨论。
题图来自网络
18 | 波动的响应延迟:如何应对变慢的 Redis?(上)
执行了一下 redis-cli --intrinsic-latency 120 命令,发现结果比较有意思,两次的结果差不多,从一开始 1 ms 的延迟,一直到后来的 8000+ ms。我访问的是 aliyun 上的 Redis。
Redis 性能诊断的三个关键点:Redis 自身特性、操作系统、文件系统
Value 类型为 String 时,操作复杂度 O(1),这个也解释了为什么有一些公司用 Redis 的时候,String 到底。
Value 类型为 Set 时,Sort、SUNION/SMEMBERS 操作复杂度分别为 O(N+M*log(M)) 和 O(N),后一个好理解,前面的那个估计得琢磨一下。
用 SSCAN 多次迭代返回代替 SMEMBERS 返回集合中所有成员。
KEYS 命令一般不用于生产环境。
不要让一批 key 的过期时间相同,可以加一个随机数
对于课后题,在生产环境中代替 KEYS 命令,返回与输入模式匹配的 keys,可以使用 SSCAN 分批次返回。
执行了一下 @泠小墨 留言中的例子,结果稍微有点意外
在 课代表 @kaito 的提示下,看了一下 Redis 在 SCAN 时采用的 高位进位法,确实浅显易懂。
19 | 波动的响应延迟:如何应对变慢的 Redis?(下)
没有发现慢查询,也没有同时删除大量的 keys,那么接下来呢?
作为 Redis 菜鸟,我觉得大多数情况下,AOF 写回策略不需要 always 的配置。
高速固态硬盘 SSD 已经成为性能优化的“杀手锏”,如果不差钱……
操作系统内存 swap 被触发之后,会影响 Redis 主 IO 线程,那么延续上面 SSD 的思路,加大内存应该可以解决部分问题。
对于关闭内存大页机制的办法,我在 macOS 上没有找到 /sys/kernel 目录。
小结中的 9 个检查点 Checklist,让我觉得专栏物超所值。课代表 @kaito 令人发指的给出了 11 个检查点,让我有了秘籍在手,天下我有的感觉。
对于课后题,没有遇到过 Redis 变慢的情况,如果以后遇到了,就回到这篇专栏文章,应该能找到线索。
虽然暂时没有接触或者运维业务中的 Redis ,但是这个专栏同时也讲了很多操作系统、底层架构方面的内容,学海无涯。
版权声明: 本文为 InfoQ 作者【escray】的原创文章。
原文链接:【http://xie.infoq.cn/article/2c0d9a296cad7b66f4b042162】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论