一、内存不足
Redis数据都是加载在内存中,如何可用内存不足,会导致频繁内存交换和清除,使Redis响应变慢,可以通过监控Redis内存使用情况,并适当增加分配的内存。
使用Redis客户端命令可以查询一段时间内的最小、最大和平均访问延迟:
$ redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1
如果看到Redis运行时延迟是其基线性能的2倍及以上,则可以认定Redis变慢了。
二、使用复杂度过高指令
可以使用Redis慢查询日志来定位慢查询,Redis提供了慢日志命令的统计功能,它记录了有哪些命令在执行时耗时比较久。
例如: 以下是设置慢日志的阀值命令,将慢日志阀值设置为3毫秒,并保留最近的100条慢日志记录:
# 命令执行耗时超过3毫秒,记录慢日志
> CONFIG SET slowlog-log-slower-than 3000
# 只保留最近100条慢日志
> CONFIG SET slowlog-max-len 100
三、操作bigkey
通过查询慢日志记录,如果发现并没有多少复杂度过高的命令,而都是SET/DEL这种简单命令出现在慢日志里, 这时就要优先怀疑是不是实例中写入了bigkey,可以通过以下命令进行扫描:
$ redis-cli -h 127.0.0.1 -p 6379 --bigkeys -i 1
注意:在线上实例进行bigkey扫描时,OPS会突增,为了降低扫描过程中对Redis产生性能影响,最好控制一下扫描频率, 执行 -i 参数, 后面的数值是每次扫描后休息的时间间隔,单位为秒。
四、键集中过期
如果发现总是在某个时间点突然出现一波延迟, 变慢的时间点特别有规律,那么就需要优先排查一下业务代码中是否存在设置大量key集中过期的情况。在集中过期这个