CentOS 上提升 Redis 性能的配置方案
一 系统层优化
echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag;永久生效可将同样命令加入 /etc/rc.local 或使用 systemd oneshot 服务在开机时执行。验证:cat /sys/kernel/mm/transparent_hugepage/enabled 应显示 never。vm.overcommit_memory=1(写入 /etc/sysctl.conf 或 /etc/sysctl.d/*.conf),避免 BGSAVE/BGREWRITEAOF 在低内存时 fork 失败。redis soft/hard nofile 65535,并在 systemd 服务单元中补充 LimitNOFILE=65535;内核参数设置 net.core.somaxconn=65535,必要时提高 net.ipv4.tcp_max_syn_backlog 与本地端口范围。二 Redis 配置优化
maxmemory <合理上限>(建议为物理内存的约 70%,预留 20%~30% 给 OS 与其他进程),根据业务选择淘汰策略:allkeys-lru/volatile-lru(通用缓存)、allkeys-lfu/volatile-lfu(热点更集中时更优)、volatile-ttl(按过期时间淘汰)。save 900 1、save 300 10、save 60 10000;开启 rdbcompression yes、rdbchecksum yes、stop-writes-on-bgsave-error yes。appendonly yes,appendfsync everysec(最多丢失 1 秒数据,性能与可靠性折中);按需设置 auto-aof-rewrite-percentage 100、auto-aof-rewrite-min-size 64mb。aof-use-rdb-preamble yes,可显著减小 AOF 体积并加速恢复。tcp-backlog 511(与内核 somaxconn 匹配),按需开启 tcp-keepalive;使用 Redis 6.0+ 的 IO 多线程(io-threads 4,通常不超过 CPU 物理核心数)加速网络与部分命令处理(注意:命令执行仍是单线程)。slowlog-log-slower-than 10000(单位微秒)、slowlog-max-len 128,定期用 SLOWLOG GET 定位瓶颈命令。三 客户端与架构优化
BLPOP/BRPOP 在极端场景会阻塞其他客户端),大数据遍历用 SCAN 替代 KEYS。四 监控与验证
INFO persistence 检查 last_bgsave_status、last_write_status、重写进度;INFO memory 观察 used_memory_rss、mem_fragmentation_ratio;SLOWLOG GET 定位慢命令。BGSAVE/BGREWRITEAOF 成功与数据一致性。五 一键可用的最小改动清单
vm.overcommit_memory=1;net.core.somaxconn=65535;redis 用户 nofile=65535(limits.conf + systemd)。maxmemory 与合适的 maxmemory-policy;RDB 使用 save 900 1 300 10 60 10000;启用 AOF 与混合持久化(appendonly yes、appendfsync everysec、aof-use-rdb-preamble yes);tcp-backlog 511;slowlog-log-slower-than 10000、slowlog-max-len 128;Redis 6.0+ 可加 io-threads 4。INFO persistence、SLOWLOG GET 与 BGSAVE/BGREWRITEAOF 验证生效与稳定性。