在 CentOS 上优化 Redis,通常从系统层、Redis 配置、内存与持久化、内核参数、监控几个方面入手。下面给出一套生产环境常用优化方案(以 CentOS 7/8 + Redis 6/7 为例)。
Redis 官方强烈建议关闭 THP,避免延迟抖动。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效:
# CentOS 7
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
Redis 连接数高时需要。
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
Redis 服务本身:
vi /etc/systemd/system/redis.service
# 或在 /usr/lib/systemd/system/redis.service
[Service]
LimitNOFILE=65535
systemctl daemon-reload
systemctl restart redis
vi /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
sysctl -p
说明:
overcommit_memory=1:防止 fork 失败somaxconn:提高连接队列bind 0.0.0.0
protected-mode no
port 6379
(生产建议只绑内网 IP)
maxmemory 8gb
maxmemory-policy allkeys-lru
常用策略:
allkeys-lru:通用缓存volatile-lru:只淘汰带 TTL 的 keynoeviction:不淘汰(写满报错)save 900 1
save 300 100
save 60 10000
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
若纯缓存可关 AOF
daemonize yes
logfile /var/log/redis/redis.log
slowlog-log-slower-than 10000
slowlog-max-len 128
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
redis-cli info memory
redis-cli info stats
redis-cli slowlog get
bind 10.0.0.10
port 6379
daemonize yes
maxmemory 8gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
slowlog-log-slower-than 5000
如果你愿意,可以告诉我:
我可以直接给你一套可用配置文件。