下面按生产环境常见做法,从 系统、Redis 配置、内存、持久化、安全、监控 几个方面,系统说明 如何优化 CentOS 上的 Redis。
Redis 官方强烈建议关闭 THP,否则会造成延迟抖动。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
开机自动关闭:
vi /etc/rc.d/rc.local
添加:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
chmod +x /etc/rc.d/rc.local
避免 “max number of clients reached” 错误。
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
vm.overcommit_memory = 1
立即生效:
sysctl -p
bind 0.0.0.0 # 生产环境建议指定 IP
port 6379
避免把系统内存吃完。
maxmemory 4gb
maxmemory-policy allkeys-lru
常用策略:
| 策略 | 说明 |
|---|---|
| volatile-lru | 只淘汰设置过期时间的 key |
| allkeys-lru | 所有 key LRU |
| noeviction | 不淘汰(写失败) |
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec
⚠️ 不建议:
appendfsync always # 太慢
# 如果不用,关闭
replicaof no one
daemonize yes
loglevel notice
logfile /var/log/redis/redis.log
避免大量小 key:
user:1:name
user:1:age
✅ 改为:
user:1 => {name, age}
EXPIRE key 3600
redis-cli --bigkeys
建议:
replicaof 192.168.1.10 6379
建议:
redis-cli --cluster create
注意:
requirepass StrongPassword123
连接:
redis-cli -a StrongPassword123
bind 127.0.0.1
或使用防火墙:
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --reload
redis-cli info
redis-cli info memory
redis-cli info stats
slowlog-log-slower-than 10000
slowlog-max-len 128
查看:
redis-cli slowlog get
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
Restart=always
[Install]
WantedBy=multi-user.target
maxmemory 8gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
save 900 1
requirepass xxx
bind 0.0.0.0
如果你愿意,可以告诉我:
我可以直接帮你 定制一份最优 redis.conf。