在 CentOS 上优化 Redis,通常从 系统层面、Redis 配置、内存与持久化、网络与客户端、监控与维护 几个方面入手。下面给你一套比较完整且可落地的优化方案。
THP 会导致 Redis 延迟升高。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
写入开机自启:
vi /etc/rc.d/rc.local
# 添加上面两行
chmod +x /etc/rc.d/rc.local
vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
vi /etc/sysctl.conf
推荐配置:
vm.overcommit_memory = 1
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 2048
应用:
sysctl -p
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis.pid
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
# 如果不用 replica
replicaof no one
# 如果不用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""
| 场景 | 推荐 |
|---|---|
| 用户在线状态 | String / Bitmap |
| 排行榜 | ZSet |
| 计数器 | String |
| 标签 | Set |
redis-cli --bigkeys
建议:
activedefrag yes
tcp-backlog 2048
减少 RTT:
pipe = r.pipeline()
pipe.set('a',1)
pipe.set('b',2)
pipe.execute()
redis-cli info memory
redis-cli info stats
redis-cli info replication
重点指标:
used_memorymem_fragmentation_ratiokeyspace_hits / missesconnected_clientsbind 0.0.0.0
port 6379
daemonize yes
maxmemory 8gb
maxmemory-policy allkeys-lru
tcp-backlog 2048
appendonly no
save ""
requirepass your_password
rename-command FLUSHALL ""
rename-command FLUSHDB ""
activedefrag yes
✅ 根据你的 内存大小 / QPS / 是否持久化 定制配置
✅ 给你 CentOS + Redis 7.x 官方最优参数
✅ 帮你分析 redis-cli info 输出
你可以直接告诉我:
Redis 版本 + 数据量 + QPS + 是否用作缓存