redis变慢后的一些分析优化办法

1、使用复杂度过高的命令(例如SORT/SUION/ZUNIONSTORE/KEYS),或一次查询全量数据(例如LRANGE key 0 N,但N很大)
分析:
a) 查看slowlog是否存在这些命令
b) Redis进程CPU使用率是否飙升(聚合运算命令导致)
解决:
a) 不使用复杂度过高的命令,或用其他方式代替实现(放在客户端做)
b) 数据尽量分批查询(LRANGE key 0 N,建议N<=100,查询全量数据建议使用HSCAN/SSCAN/ZSCAN)

2、操作bigkey
分析:
a) slowlog出现很多SET/DELETE变慢命令(bigkey分配内存和释放内存变慢)
b) 使用redis-cli -h $host -p $port --bigkeys扫描出很多bigkey
解决:
a) 优化业务,避免存储bigkey
b) Redis 4.0+可开启lazy-free机制

3、大量key集中过期
分析:
a) 业务使用EXPIREAT/PEXPIREAT命令
b) Redis info中的expired_keys指标短期突增
解决:
a) 优化业务,过期增加随机时间,把时间打散,减轻删除过期key的压力
b) 运维层面,监控expired_keys指标,有短期突增及时报警排查

4、Redis内存达到maxmemory
分析:
a) 实例内存达到maxmemory,且写入量大,淘汰key压力变大
b) Redis info中的evicted_keys指标短期突增
解决:
a) 业务层面,根据情况调整淘汰策略(随机比LRU快)
b) 运维层面,监控evicted_keys指标,有短期突增及时报警 c) 集群扩容,多个实例减轻淘汰key的压力

5、大量短连接请求
分析:Redis处理大量短连接请求,TCP三次握手和四次挥手也会增加耗时
解决:使用长连接操作Redis

6、生成RDB和AOF重写fork耗时严重
分析:
a) Redis变慢只发生在生成RDB和AOF重写期间
b) 实例占用内存越大,fork拷贝内存页表越久
c) Redis info中latest_fork_usec耗时变长
解决:
a) 实例尽量小
b) Redis尽量部署在物理机上
c) 优化备份策略(例如低峰期备份)
d) 合理配置repl-backlog和slave client-output-buffer-limit,避免主从全量同步
e) 视情况考虑关闭AOF f) 监控latest_fork_usec耗时是否变长

7、AOF使用awalys机制
分析:磁盘IO负载变高
解决:
a) 使用everysec机制
b) 丢失数据不敏感的业务不开启AOF

8、使用Swap
分析:
a) 所有请求全部开始变慢
b) slowlog大量慢日志
c) 查看Redis进程是否使用到了Swap
解决:
a) 增加机器内存
b) 集群扩容
c) Swap使用时监控报警

9、进程绑定CPU不合理
分析:
a) Redis进程只绑定一个CPU逻辑核
b) NUMA架构下,网络中断处理程序和Redis进程没有绑定在同一个Socket下
解决:
a) Redis进程绑定多个CPU逻辑核
b) 网络中断处理程序和Redis进程绑定在同一个Socket下

10、开启透明大页机制
分析:生成RDB和AOF重写期间,主线程处理写请求耗时变长(拷贝内存副本耗时变长)
解决:关闭透明大页机制

11、网卡负载过高
分析:
a) TCP/IP层延迟变大,丢包重传变多
b) 是否存在流量过大的实例占满带宽
解决:
a) 机器网络资源监控,负载过高及时报警
b) 提前规划部署策略,访问量大的实例隔离部署

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值