回答重点
- 首先需要排查并确定根因:通过监控工具(如 Prometheus 、 Grafana 等或云上自带的一些监控)査看 Redis 的 CPU、内存、命令执行时间或带宽等指标,确定瓶颈所在
- 依据根因针对性解决问题:
- 如果是内存耗尽,可能需要增加机器的内存量(升配)即临时升配解决线上问题后。后续再走查代码和了解相关业务,判断有些数据是否有必要都存储到 Redis 中,有些数据的过期时间是否设置的过长等等来优化占用 Redis 的大小。
- 如果是 CPU 使用率飙升,可能是因为大量的读写请求,且涉及复杂度较高的命令,比如聚合、排序等等。此时可能需要重新发版或者回退版本下线有影响的业务,后续针对具体业务评估优化,是否可以将一些操作放到后端服务执行,将一些包含大量数据的大key 拆分成多个小key。也可以使用 Redis 集群分片,分散计算压力。
- 如果是带宽方面,则需要增加带宽配置,加大带宽。
除了 Redis 自身的优化之外,还可以利用本地缓存来降低 Redis 的负载。
一些热,点数据可以存储在后端服务本地,请求先打到后端服务,如果命中本地缓存,则不需要请求Redis 直接可以返回数据,这种情况就大大的减轻了 Redis 压力,解决(集群内)单机器负载高的情况。
还有,除了上述的应急处理手段之外,各组件应都要配置监控报警机制,例如内存的國值,当内存占用率法到 80%6就很警(邮件、企散、钉红、短信)等通知开发者,及时外理即将发生的问题,避免问题进一步扩大