在 CentOS 上优化 Redis,一般从 操作系统层面、Redis 自身配置、内存与持久化策略、网络与监控 几个方面入手。下面按实用优先级给你一套可落地的优化建议。
Redis 官方明确不建议使用 THP:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(CentOS 7/8):
# /etc/rc.local 或 systemd 中执行
echo 1 > /proc/sys/vm/overcommit_memory
推荐配置:
vm.overcommit_memory = 1
写入 /etc/sysctl.conf:
sysctl -w vm.overcommit_memory=1
ulimit -n 65535
永久配置 /etc/security/limits.conf:
* soft nofile 65535
* hard nofile 65535
sysctl vm.swappiness=1
bind 0.0.0.0
port 6379
⚠️ 生产环境建议:
requirepass yourpassword
maxmemory 8gb
maxmemory-policy allkeys-lru
常见策略:
allkeys-lru(通用推荐)volatile-lru(只淘汰带过期时间的 key)noeviction(不淘汰,写报错)save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
⚠️ 高性能场景:
appendfsync no
(风险:宕机可能丢数据)
save ""
# 不使用 RDB
或:
appendonly no
(根据业务选择)
tcp-backlog 511
timeout 300
tcp-keepalive 60
slowlog-log-slower-than 10000
slowlog-max-len 128
systemctl enable redis
systemctl start redis
确保:
daemonize no
supervised systemd
Redis 是单线程:
taskset -c 0 redis-server
redis-cli info memory
redis-cli info stats
redis-cli slowlog get
| 问题 | 原因 | 解决 |
|---|---|---|
| 延迟高 | 大 key | 拆分 key |
| CPU 高 | 慢命令 | 优化命令 |
| 内存爆 | 无淘汰 | 设置 maxmemory |
| 写阻塞 | AOF fsync | 改 everysec/no |
bind 0.0.0.0
port 6379
requirepass 123456
maxmemory 8gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-backlog 511
timeout 300
slowlog-log-slower-than 10000
如果你能告诉我:
我可以给你 更精准的配置模板。