在 CentOS 上部署 Redis 时,调优通常从 操作系统、Redis 配置、内存与持久化、网络、监控 几个方面入手。下面给你一套 生产环境常用且实用的调优方案。
Redis 对 THP 非常敏感,会导致延迟抖动。
# 临时关闭
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久关闭(CentOS 7/8)
cat >> /etc/rc.d/rc.local << EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.d/rc.local
Redis 连接数多时需要。
# 查看
ulimit -n
# 修改
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
重启或重新登录生效。
vi /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
vm.swappiness = 1
sysctl -p
✅ overcommit_memory=1 对 Redis 非常重要(防止 fork 失败)
Redis 是内存数据库,swap 会严重拖慢性能。
swapoff -a
永久关闭:
vi /etc/fstab
# 注释 swap 行
maxmemory 8gb
maxmemory-policy allkeys-lru
常用策略:
allkeys-lru:生产环境最常用volatile-lru:只淘汰带过期时间的 keynoeviction:写满直接报错(不推荐)save ""
appendonly no
appendonly yes
appendfsync everysec
⚠ 不建议使用 appendfsync always(性能差)
tcp-backlog 65535
timeout 0
tcp-keepalive 60
maxclients 10000
protected-mode no
⚠ 公网环境不要这样配置,需加密码。
daemonize yes
bind 0.0.0.0
taskset -c 0 ./redis-server redis.conf
| 场景 | 推荐 |
|---|---|
| 计数器 | String |
| 用户标签 | Set / Bitmap |
| 排行榜 | Sorted Set |
| 对象缓存 | Hash |
redis-cli --bigkeys
建议:
EXPIRE key 3600
避免内存无限增长。
requirepass yourpassword
重点关注:
redis-cli info memory
redis-cli info stats
| 问题 | 原因 |
|---|---|
| 延迟高 | THP、swap、AOF always |
| 内存暴涨 | 大 key、无过期 |
| OOM | maxmemory 未设置 |
| fork 失败 | overcommit_memory |
bind 0.0.0.0
port 6379
daemonize yes
maxmemory 6gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-backlog 65535
timeout 0
tcp-keepalive 60
maxclients 10000
requirepass redis123
如果你愿意,我可以:
直接把你的 Redis 版本 + 内存 + 业务场景 发我即可。