温馨提示×

怎么解决CentOS Redis延迟

小樊
35
2026-08-03 13:49:41
栏目: 云计算

CentOS 环境 中解决 Redis 延迟高 的问题,通常需要从 系统、网络、Redis 配置、业务使用方式 四个层面来排查和优化。下面给你一套实战向排查与优化清单


一、先确认:Redis 延迟到底有多高?

1️⃣ 使用 Redis 自带延迟检测命令

redis-cli --latency -h 127.0.0.1 -p 6379
redis-cli --latency-history -h 127.0.0.1 -p 6379

2️⃣ 查看慢查询

redis-cli
127.0.0.1:6379> CONFIG SET slowlog-log-slower-than 10000
127.0.0.1:6379> SLOWLOG GET 20

单位:微秒(10000 = 10ms)


二、CentOS 系统层常见问题与优化

✅ 1. 关闭透明大页(THP)【非常关键】

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

✅ 2. 调整系统最大文件描述符

ulimit -n

建议:

vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

✅ 3. 内核参数优化(推荐)

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 配置优化(重点)

✅ 1. 关闭 swap(非常重要)

Redis 一旦被 swap,延迟会暴涨。

swapoff -a

永久关闭:

vi /etc/fstab
# 注释 swap 行

✅ 2. 调整 Redis 配置(redis.conf)

① 最大内存 & 淘汰策略

maxmemory 8gb
maxmemory-policy allkeys-lru

② 关闭 AOF(或优化)

如果允许丢数据:

appendonly no

如果必须 AOF:

appendfsync everysec

③ 关闭 RDB(或错峰)

save ""

或改为:

save 900 1

✅ 3. 避免大 Key

redis-cli --bigkeys

问题示例:

  • 超大 hash / list / set
  • value 超过 10KB

✅ 解决:

  • 拆分 key
  • 压缩 value
  • 使用 pipeline

四、网络 & 客户端问题

✅ 1. 避免跨机房 / 跨公网访问 Redis

✅ 建议:

  • Redis 与应用在同一内网
  • 延迟 < 1ms

✅ 2. 使用连接池 & Pipeline

❌ 错误示例:

for i in range(1000):
    redis.get(key)

✅ 正确:

pipeline

✅ 3. 避免频繁短连接

  • 使用 长连接
  • 复用连接池

五、CPU & 内存问题排查

✅ 1. 查看 CPU 是否打满

top

Redis 是 单线程,一个核打满就会延迟。

✅ 优化:

  • 避免复杂命令(Lua、sort、keys)
  • 拆分 Redis 实例

✅ 2. 查看是否发生 OOM

dmesg | grep -i oom

六、常见 Redis 延迟原因速查表

原因 现象 解决
THP 开启 偶尔卡顿 关闭 THP
swap 延迟抖动 关闭 swap
大 key 慢查询 拆分 key
AOF always 写入慢 改为 everysec
keys * 阻塞 禁用
网络跨公网 高延迟 同机房
CPU 打满 QPS 下降 拆分实例

七、推荐 Redis 延迟排查顺序(实战)

  1. redis-cli --latency
  2. SLOWLOG GET
  3. 是否开启 THP
  4. 是否使用 swap
  5. 是否有大 key
  6. AOF / RDB 配置
  7. 网络是否跨机房
  8. 是否单核 CPU 打满

八、如果你愿意,我可以帮你进一步分析

你可以直接贴出:

  • ✅ Redis 版本
  • redis.conf 关键配置
  • slowlog get 输出
  • ✅ 延迟数值(avg / max)
  • ✅ Redis 部署方式(单机 / 集群 / 哨兵)

我可以直接帮你精准定位是哪一点导致延迟

0