Redis 真的变慢了吗?
-
redis是业务系统中的一个环节,redis延时增加会导致业务一串连锁反应
- 例如将redis和mysql放在一个事务中,导致mysql占据资源
-
怎么看redis是不是真的变慢了
-
查看redis延迟 环境原因很高
-
基于当前环境下的 Redis 基线性能\
-
基线即系统在低压力、无干扰下的基本性能
-
redis-cli 命令提供了–intrinsic-latency 选项,可以用来监测和统计测试期间内的最大延迟\
-
如果你观察到的 Redis 运行时延迟是其基线性能的 2 倍及以上,就可以认定 Redis 变慢了\
-
用 iPerf 这样的工具,测量从 Redis 客户端到服务器端的网络延迟
-
-
如何应对 Redis 变慢?
-
怎么诊断redis慢的原因
- redis自身操作特性
- 文件系统
- 操作系统
\
Redis 自身操作特性的影响
-
1.慢查询命令
-
必须要知道 Redis 的不同命令的复杂度 redis官网 redis.io/commands/\
-
可以通过 Redis 日志,或者是 latency monitor 工具,查询变慢的请求\
-
针对慢查询命令
-
用其他高效指令代替 不要使用 SMEMBERS 命令,而是要使用 SSCAN 多次迭代返回
-
当你需要执行排序、交集、并集操作时,可以在客户端完成,而不要用 SORT、SUNION、SINTER 这些命令,以免拖慢 Redis 实例\
-
KEYS 命令一般不被建议用于生产环境中\
-
-
提升硬件水平\
-
-
2.过期 key 的自动删除机制
-
默认情况下:Redis 每 100 毫秒会删除一些过期 key
-
采样 ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP 个数的 key,并将其中过期的 key 全部删除\
-
如果超过 25% 的 key 过期了,则重复删除的过程,直到过期 key 的比例降至 25% 以下\
- 产生的原因:频繁使用相同的时间参数的EXPIREAT 命令设置过期 key
- 解法:加上一个一定大小范围内的随机数
-
ACTIVE_EXPIRE_CYCLE_LOOKUPS_PER_LOOP默认是20\
-
-
删除操作是阻塞的
-
总结
-
检查redis是否变慢
- 响应延迟
- 基线性能
-
排查慢的原因
- 从慢指令开始排查
- 排查过期时间,可以设置一下段随机时间(业务允许的情况下)
\