redis比较常见的性能问题

一、内存相关问题​
​1. 内存不足(OOM)​​
​现象​:OOM errors、响应超时、节点崩溃。
​原因​:
数据量超过 maxmemory 限制。
未设置合理淘汰策略(如 allkeys-lru)。
​解决​:
监控内存使用(INFO memory),预留 20%~30% 缓冲。
设置 maxmemory-policy(推荐 volatile-lru 或 allkeys-lru)。
拆分大 Key(见下文),开启内存碎片整理(activedefrag yes)。
​2. 内存碎片过高​
​现象​:mem_fragmentation_ratio > 1.5(INFO memory 查看),内存浪费严重。
​原因​:频繁修改、删除 Key(如 List 元素 pop/push)。
​解决​:
开启碎片整理:activedefrag yes + 调整 active-defrag-* 参数。
升级 Redis 6.2+(优化 jemalloc 碎片管理)。
避免频繁删除大 Key,重启节点释放碎片(谨慎操作)。
⚡ ​二、CPU 与延迟问题​
​1. CPU 跑满(100%)​​
​现象​:响应延迟飙升,slowlog 大量记录。
​原因​:
​复杂命令​:KEYS *、FLUSHALL、大数据集 SINTER/ZUNIONSTORE。
​过期 Key 集中清理​(active-expire-cycle 占用)。
​RDB/AOF 持久化​:bgsave 或 rewriteaof 时 fork 阻塞。
​解决​:
​禁用高危命令​:rename-command KEYS “”。
避免单 Key 过大(拆分集合类型)。
调整持久化策略:AOF 改为 everysec,减少 RDB 频率。
升级 SSD 磁盘(降低 fork 阻塞时间)。
​2. 慢查询(Slow Query)​​
​现象​:SLOWLOG get 记录大量 >10ms 操作。
​原因​:
​大 Key 操作​:获取 10MB 的 String,遍历 100 万成员的 Set。
​不合理管道​:PIPELINE 内堆积过多命令阻塞响应。
​解决​:
​所有操作时间复杂度必须为 O(1) 或 O(logN)​。
禁止 HGETALL、SMEMBERS → 用 HSCAN/SSCAN 分批次获取。
控制 Pipeline 命令数量(一般不超过 100/次)。
使用 redis-cli –latency 检测网络延迟问题。
📦 ​三、数据模型问题​
​1. 大 Key(Big Key)​​
​定义​:
String 类型 > 10 KB
集合类型(Hash/List/Set/ZSet)元素 > 5,000
​风险​:阻塞网络、内存溢出、持久化超时。
​排查​:redis-cli –bigkeys(生产慎用,改用离线分析工具)。
​优化​:
​拆分 Key​:Hash → user:{id}:profile_base + user:{id}:profile_detail。
​压缩​:gzip 压缩 String 值(需权衡 CPU)。
​分片读取​:ZRANGEBYSCORE → ZSCAN 分批操作。
​2. 热 Key(Hot Key)​​
​现象​:单 Key QPS > 5,000,节点流量不均。
​解决​:
​客户端缓存​:Redis 6.0+ Client-side Caching(CLIENT TRACKING)。
​读分离​:增加副本节点分担读压力。
​本地缓存​:在应用层用 Caffeine 或 Guava Cache 挡一层。
​分片存储​:将 Key 复制多份(如 hot_key_v1, hot_key_v2),轮询访问。
📡 ​四、网络与连接问题​
​1. 连接数耗尽​
​现象​:ERR max number of clients reached,新连接失败。
​原因​:
maxclients 设置过低(默认 10,000)。
客户端未释放连接(如连接池泄漏)。
​解决​:
调高 maxclients(需考虑系统句柄数限制)。
使用连接池(如 Lettuce、Jedis),检查泄漏(CLIENT LIST 看 idle 时间)。
​2. 网络拥堵​
​现象​:throughput 下降,延迟抖动。
​原因​:
单节点流量超过网卡上限(如 10 Gbps)。
跨机房访问(网络延迟增加)。
​解决​:
分片集群:增加节点分摊流量。
同机房部署:避免跨 AZ 访问。
升级网络:万兆网卡或 RDMA。
💾 ​五、持久化问题​
​1. AOF 阻塞写入​
​现象​:aof_delayed_fsync 计数上升,主线程阻塞。
​原因​:appendfsync always 每次写入同步磁盘(性能极差)。
​解决​:改为 appendfsync everysec(平衡性能与安全)。
​2. RDB fork 超时​
​现象​:bgsave 时主线程卡顿数秒。
​原因​:数据集大 + 磁盘慢,fork() 耗时过长。
​优化​:
使用 SSD 磁盘。
控制 save 频率(如从 save 60 10000 调整为 save 300 1000)。
关闭透明大页(THP):echo never > /sys/kernel/mm/transparent_hugepage/enabled。
⚙️ ​六、集群与高可用问题​
​1. 数据倾斜​
​表现​:部分节点内存/CPU 使用率远超其他节点。
​解决​:
​均匀分片​:避免使用单一 hash tag(如 {user123})。
扩容集群:增加分片数。
手动迁移 Slot(CLUSTER SETSLOT + MIGRATE)。
​2. 脑裂(Split-Brain)​​
​现象​:主从切换后数据丢失。
​预防​:
设置 min-slaves-to-write 1(至少 1 个从节点同步才可写)。
合理配置 cluster-node-timeout(默认 15s,避免过早切换)。

redis比较常见的性能问题插图

欢迎使用66资源网
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
7. 本站有不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别!

66源码网 » redis比较常见的性能问题

提供最优质的资源集合

立即查看 了解详情