在 CentOS 上优化 Redis 配置,通常从操作系统层面、Redis 自身配置、内存与持久化策略、监控与压测几个方面入手。下面给你一份相对系统、可落地的调优指南(基于 CentOS 7/8 + Redis 5/6/7)。
Redis 官方强烈建议关闭 THP,否则会导致延迟抖动。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(CentOS 7/8):
# /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
chmod +x /etc/rc.d/rc.local
Redis 连接数高时需调大:
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
vm.overcommit_memory = 1
应用:
sysctl -p
vm.overcommit_memory=1可避免 fork 时 OOM
tuned-adm profile latency-performance
bind 0.0.0.0
port 6379
maxmemory 8gb
maxmemory-policy allkeys-lru
常见策略:
allkeys-lru:缓存场景常用volatile-lru:只淘汰带 TTL 的 keynoeviction:写满报错(不推荐生产)save 900 1
save 300 10
save 60 10000
如果只做缓存:
save ""
appendonly yes
appendfsync everysec
always最安全但慢,no最快但不安全
AOF 重写:
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
slowlog-log-slower-than 10000
slowlog-max-len 128
timeout 300
tcp-keepalive 60
maxclients 10000
daemonize yes
pidfile /var/run/redis_6379.pid
KEYS *SCAN减少网络往返:
redis-cli --pipe
redis-cli info
redis-cli info memory
redis-cli info stats
redis-cli slowlog get
redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
redis-cli --stat| 场景 | 建议 |
|---|---|
| 纯缓存 | 关 RDB,开 LRU |
| 高并发读 | 多实例 / 主从 |
| 高可用 | Redis Sentinel / Cluster |
| 低延迟 | 关闭 AOF,关闭 swap |
✅ 关 THP
✅ 调 maxmemory + 淘汰策略
✅ 合理 AOF / RDB
✅ 内核参数优化
✅ 避免大 Key
✅ 持续监控
如果你愿意,可以告诉我:
我可以直接帮你给一份具体 redis.conf 示例。