温馨提示×

如何优化CentOS Redis

小樊
38
2026-08-29 18:35:45
栏目: 云计算

CentOS 上优化 Redis,通常从 系统层面、Redis 配置、内存与持久化、网络与客户端、监控与维护 几个方面入手。下面给你一套比较完整且可落地的优化方案


一、系统层面优化(CentOS)

1. 关闭 Transparent Huge Pages(THP)

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

2. 调整系统最大文件描述符

vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

3. 内核参数优化

vi /etc/sysctl.conf

推荐配置:

vm.overcommit_memory = 1
net.core.somaxconn = 2048
net.ipv4.tcp_max_syn_backlog = 2048

应用:

sysctl -p

4. 使用高性能 CPU 调度

echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

二、Redis 配置优化(redis.conf)

1. 绑核 & 后台运行

bind 0.0.0.0
daemonize yes
pidfile /var/run/redis.pid

2. 内存优化(核心)

设置最大内存

maxmemory 8gb
maxmemory-policy allkeys-lru

常见策略:

  • allkeys-lru ✅ 推荐
  • volatile-lru
  • noeviction(不删除,写失败)

3. 持久化优化(根据场景)

方案 A:高性能(缓存)

save ""
appendonly no

方案 B:高可靠(数据不能丢)

appendonly yes
appendfsync everysec

⚠️ appendfsync always 性能最差,一般不推荐


4. 关闭或优化慢日志

slowlog-log-slower-than 10000
slowlog-max-len 128

5. 关闭无用功能

# 如果不用 replica
replicaof no one

# 如果不用危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB ""

三、内存与数据结构优化

1. 使用合适的数据结构

场景 推荐
用户在线状态 String / Bitmap
排行榜 ZSet
计数器 String
标签 Set

2. 避免大 Key

redis-cli --bigkeys

建议:

  • String < 10KB
  • Hash/Set/ZSet < 5000 元素

3. 开启内存碎片整理(Redis ≥ 4.0)

activedefrag yes

四、网络与客户端优化

1. 增加 TCP backlog

tcp-backlog 2048

2. 使用连接池

  • Java:Jedis / Lettuce 连接池
  • Python:redis-py 连接池
  • 避免频繁 disconnect

3. 合并命令(Pipeline)

减少 RTT:

pipe = r.pipeline()
pipe.set('a',1)
pipe.set('b',2)
pipe.execute()

五、监控与排障

1. 基础监控

redis-cli info memory
redis-cli info stats
redis-cli info replication

重点指标:

  • used_memory
  • mem_fragmentation_ratio
  • keyspace_hits / misses
  • connected_clients

2. 推荐监控工具

  • redis-exporter + Prometheus + Grafana
  • Redis Insight(官方 GUI)

六、生产环境推荐配置示例(缓存型)

bind 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

七、常见误区 ❌

  • 开了 AOF + always 反而更慢
  • 不设 maxmemory 导致 OOM
  • 用 Redis 当数据库存超大对象
  • 单线程下执行 Lua 阻塞命令

八、如果你愿意,我可以:

✅ 根据你的 内存大小 / QPS / 是否持久化 定制配置
✅ 给你 CentOS + Redis 7.x 官方最优参数
✅ 帮你分析 redis-cli info 输出

你可以直接告诉我:

Redis 版本 + 数据量 + QPS + 是否用作缓存

0