在 CentOS 上优化 Redis 配置,通常从 操作系统层面、Redis 自身配置、内存与持久化策略、网络与连接 几个方面入手。下面给你一套实用、可落地的优化方案。
Redis 官方强烈建议关闭 THP,否则会导致延迟抖动。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(CentOS 7/8):
vim /etc/rc.local
# 添加上面两行
chmod +x /etc/rc.local
Redis 连接数高时需要更大的 fd。
vim /etc/security/limits.conf
添加:
* soft nofile 65535
* hard nofile 65535
vim /etc/sysctl.conf
vm.overcommit_memory = 1
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
生效:
sysctl -p
vm.overcommit_memory=1可避免 fork 时内存分配失败
配置文件一般位于:
/etc/redis.conf
bind 0.0.0.0
protected-mode no
生产环境建议只绑内网 IP,并加密码
maxmemory 4gb
maxmemory-policy allkeys-lru
常见策略:
allkeys-lru:所有 key LRU(最常用)volatile-lru:只淘汰带过期时间的 keynoeviction:写满直接报错(不推荐)save 900 1
save 300 10
save 60 10000
如果容忍少量数据丢失:
save 300 1000
appendonly yes
appendfsync everysec
everysec是性能与安全的折中
slowlog-log-slower-than 10000
slowlog-max-len 128
tcp-backlog 65535
timeout 0
tcp-keepalive 60
Redis 6+ 可开启 IO 线程:
io-threads 4
io-threads-do-reads yes
多核机器效果明显
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command KEYS ""
Hash / Ziplist 代替大量小 keyPipeline 减少网络往返查看大 key:
redis-cli --bigkeys
redis-cli info memory
redis-cli info stats
redis-cli slowlog get
常用监控指标:
used_memoryevicted_keysinstantaneous_ops_per_seclatencybind 0.0.0.0
maxmemory 8gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-backlog 65535
io-threads 4
io-threads-do-reads yes
如果你能告诉我:
我可以给你一套 更精准的配置模板。