下面从 CentOS 系统层面 + Redis 配置层面 + 架构层面 给你一套比较完整的 Redis 优化方案,适合生产环境。
Redis 是内存数据库,不要频繁使用 swap。
# 查看 swap
free -h
推荐设置:
# 尽可能不用 swap
echo 1 > /proc/sys/vm/swappiness
永久生效:
echo "vm.swappiness = 1" >> /etc/sysctl.conf
sysctl -p
Redis 官方明确建议关闭,否则会导致延迟抖动。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
永久生效:
echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
Redis 会有大量连接。
ulimit -n
建议至少:
ulimit -n 65535
永久生效:
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
sysctl -p
如果 Redis 是独占服务器,可以绑定 CPU:
# redis-server 启动参数
taskset -c 0,1 redis-server redis.conf
避免 Redis 把系统内存吃完。
maxmemory 8gb
策略选择(推荐):
maxmemory-policy allkeys-lru
常用策略:
allkeys-lru ✅ 通用volatile-lrunoeviction(不推荐)save ""
appendonly no
推荐:
appendonly yes
appendfsync everysec
⚠️ 不建议:
appendfsync always # 很慢
slowlog-log-slower-than 10000 # 微秒
slowlog-max-len 128
protected-mode no
tcp-backlog 65535
大 Key 是 Redis 性能杀手。
redis-cli --bigkeys
建议:
热 Key 会导致单线程瓶颈。
解决方案:
❌ 错误:
set a 1
set b 2
set c 3
✅ 正确:
pipeline
MSET a 1 b 2 c 3
例如:
replicaof <master_ip> <master_port>
避免频繁建连(尤其是 Java / Go)。
redis-cli info stats
redis-cli info memory
redis-cli --latency
redis-cli --latency-history
bind 0.0.0.0
port 6379
maxmemory 16gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-backlog 65535
Redis 优化 = 不让他用 swap + 控制内存 + 避免大 Key + 合理的持久化 + 架构拆分
如果你愿意,可以告诉我:
我可以给你 直接可用的 redis.conf 生产配置。