优化 CentOS 上的 Redis 一般从 系统层面、Redis 配置、内存与持久化、网络与安全、监控与压测 几个方面入手。下面给你一套实战型优化清单,适合生产环境。
THP 对 Redis 性能影响很大。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效:
vi /etc/rc.d/rc.local
加入上述两行,并:
chmod +x /etc/rc.d/rc.local
vi /etc/sysctl.conf
推荐配置:
vm.overcommit_memory = 1
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 2048
vm.swappiness = 1
生效:
sysctl -p
✅ overcommit_memory=1 防止 fork 失败
✅ swappiness=1 减少 swap 使用
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
路径一般为:
/etc/redis.conf或/etc/redis/redis.conf
bind 0.0.0.0 # 生产建议绑定具体 IP
port 6379
tcp-backlog 2048
timeout 0
tcp-keepalive 60
maxmemory 4gb # 根据服务器内存设置
maxmemory-policy allkeys-lru
常见淘汰策略:
| 策略 | 说明 |
|---|---|
| allkeys-lru | 最常用 |
| volatile-lru | 只淘汰有过期时间的 key |
| noeviction | 不淘汰(写满报错) |
save ""
appendonly no
appendonly yes
appendfsync everysec
避免:
appendfsync always # 极低性能
databases 1
rename-command FLUSHALL ""
rename-command FLUSHDB ""
减少 RTT,提升吞吐量。
redis-cli --bigkeys
❌ 避免:
✅ 拆分、压缩、分片
HSET user:1001 name Tom age 18
比多个 string 更省内存。
lazyfree-lazy-expire yes
lazyfree-lazy-eviction yes
lazyfree-lazy-server-del yes
避免删除大 key 阻塞。
requirepass yourpassword
ps -ef | grep redis
✅ 使用专用用户:
useradd -r -s /sbin/nologin redis
redis-cli info stats
redis-cli info memory
redis-cli info cpu
重点看:
used_memorykeyspace_hits/missesinstantaneous_ops_per_secredis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000
| 问题 | 原因 |
|---|---|
| CPU 高 | 大 key / 复杂命令 |
| 内存涨得快 | 没限制 maxmemory |
| 延迟高 | AOF always / swap |
| fork 失败 | overcommit_memory 未设置 |
maxmemory 8gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-backlog 2048
requirepass xxx
lazyfree-lazy-eviction yes
如果你愿意,可以告诉我:
我可以 直接帮你定制一份 redis.conf ✅