在 CentOS 环境 中解决 Redis 延迟高 的问题,通常需要从 系统、网络、Redis 配置、业务使用方式 四个层面来排查和优化。下面给你一套实战向排查与优化清单。
redis-cli --latency -h 127.0.0.1 -p 6379
redis-cli --latency-history -h 127.0.0.1 -p 6379
redis-cli
127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 10000
127.0.0.1:6379> SLOWLOG GET 20
单位:微秒(10000 = 10ms)
Redis 官方强烈建议关闭 THP。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效:
vi /etc/rc.d/rc.local
添加:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
ulimit -n
建议:
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vi /etc/sysctl.conf
vm.swappiness = 1
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 2048
vm.overcommit_memory = 1
生效:
sysctl -p
Redis 一旦被 swap,延迟会暴涨。
swapoff -a
永久关闭:
vi /etc/fstab
# 注释 swap 行
maxmemory 8gb
maxmemory-policy allkeys-lru
如果允许丢数据:
appendonly no
如果必须 AOF:
appendfsync everysec
save ""
或改为:
save 900 1
redis-cli --bigkeys
问题示例:
✅ 解决:
✅ 建议:
❌ 错误示例:
for i in range(1000):
redis.get(key)
✅ 正确:
pipeline
top
Redis 是 单线程,一个核打满就会延迟。
✅ 优化:
dmesg | grep -i oom
| 原因 | 现象 | 解决 |
|---|---|---|
| THP 开启 | 偶尔卡顿 | 关闭 THP |
| swap | 延迟抖动 | 关闭 swap |
| 大 key | 慢查询 | 拆分 key |
| AOF always | 写入慢 | 改为 everysec |
| keys * | 阻塞 | 禁用 |
| 网络跨公网 | 高延迟 | 同机房 |
| CPU 打满 | QPS 下降 | 拆分实例 |
redis-cli --latencySLOWLOG GET你可以直接贴出:
redis.conf 关键配置slowlog get 输出我可以直接帮你精准定位是哪一点导致延迟。