Redis 运维的故障有哪些?如何排查?
常见的运维故障
-
使用 keys * 把库堵死,——建议使用别名把这个命令改名
-
超过内存使用后,部分数据被删除——这个有删除策略的,选择适合自己的即可
-
没开持久化,却重启了实例,数据全掉——记得非缓存的信息需要打开持久化
-
RDB 的持久化需要 vm.overcommit_memory=1,否则会持久化失败
-
没有持久化情况下,主从,主重启太快,从还没认为主挂的情况下,从会清空自己的数据——人为重启主节点前,先关闭从节点的同步
排查方法
-
了解清楚业务数据流是怎么样的流向
-
结合 Redis 监控查看 QPS、缓存命中率、内存使用率等信息
-
确认机器层面的资源是否有异常
-
故障时及时上机,使用 redis-cli monitor 打印出操作日志,然后分析(事后分析此条失效)
-
和研发沟通,确认是否有大 Key 在堵塞(大 Key 也可以在日常的巡检中获得)
-
和组内同事沟通,确实是否有误操作
-
和运维同事、研发一起排查流量是否正常,是否存在被刷的情况
-
更多的排查需要对线上系统的分析。
Redis 性能优化
-
根据不同业务选择数据类型,有必要时对数据结构进行审核,减少数据冗余
-
精简键名和键值,控制键值的大小
-
使用前缀管理好 key,防止key的重名导致value被覆盖
-
使用 scan 代替 keys,将遍历 Redis DB 中所有 key 的操作放到客户端来做
-
避免使用 O(N) 复杂度的命令
-
配置使用 ziplist 来优化 list
-
合理配置 maxmemory
-
数据量大的情况,做好 key 和 value 的压缩
-
利用管道,批量处理命令
-
根据不同业务选择短链接或者长链接
-
定期使用 redis-cli --big-keys 检测大 Key