温馨提示×

CentOS Redis如何优化

小樊
39
2026-08-29 18:38:44
栏目: 云计算

下面从 CentOS 系统层面 + Redis 配置层面 + 架构层面 给你一套比较完整的 Redis 优化方案,适合生产环境。


一、CentOS / Linux 系统层面优化

1. 内存与 swap(非常重要)

Redis 是内存数据库,不要频繁使用 swap

# 查看 swap
free -h

推荐设置:

# 尽可能不用 swap
echo 1 > /proc/sys/vm/swappiness

永久生效:

echo "vm.swappiness = 1" >> /etc/sysctl.conf
sysctl -p

2. 关闭透明大页(THP)

Redis 官方明确建议关闭,否则会导致延迟抖动。

echo never > /sys/kernel/mm/transparent_hugepage/enabled

永久生效:

echo "echo never > /sys/kernel/mm/transparent_hugepage/enabled" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local

3. 文件描述符限制

Redis 会有大量连接。

ulimit -n

建议至少:

ulimit -n 65535

永久生效:

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

4. 网络参数优化

vi /etc/sysctl.conf
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
sysctl -p

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

1. 绑定 CPU(可选)

如果 Redis 是独占服务器,可以绑定 CPU:

# redis-server 启动参数
taskset -c 0,1 redis-server redis.conf

2. 最大内存限制(必须)

避免 Redis 把系统内存吃完。

maxmemory 8gb

策略选择(推荐):

maxmemory-policy allkeys-lru

常用策略:

  • allkeys-lru ✅ 通用
  • volatile-lru
  • noeviction(不推荐)

3. 持久化优化(RDB / AOF)

如果对性能要求高

save ""
appendonly no

如果允许一定持久化

推荐:

appendonly yes
appendfsync everysec

⚠️ 不建议:

appendfsync always   # 很慢

4. 关闭或优化慢日志

slowlog-log-slower-than 10000   # 微秒
slowlog-max-len 128

5. 关闭保护模式(集群或内网)

protected-mode no

6. TCP backlog

tcp-backlog 65535

三、Redis 使用层面优化

1. 避免大 Key

大 Key 是 Redis 性能杀手。

redis-cli --bigkeys

建议:

  • String ≤ 10KB
  • Hash / ZSet / Set ≤ 5000 个元素

2. 避免热 Key

热 Key 会导致单线程瓶颈。

解决方案:

  • 本地缓存(如 JVM 缓存)
  • Key 拆分(key_1、key_2)

3. Pipeline / 批量操作

❌ 错误:

set a 1
set b 2
set c 3

✅ 正确:

pipeline
MSET a 1 b 2 c 3

4. 合理的数据结构

例如:

  • 对象 → Hash
  • 排行榜 → ZSet
  • 去重 → Set

四、架构层面优化

1. 主从 + 哨兵

  • 主:写
  • 从:读
replicaof <master_ip> <master_port>

2. Redis Cluster(推荐大规模)

  • 数据分片
  • 水平扩展
  • 高可用

3. 使用连接池

避免频繁建连(尤其是 Java / Go)。


五、监控与排查

1. 查看性能

redis-cli info stats
redis-cli info memory

2. 延迟排查

redis-cli --latency
redis-cli --latency-history

六、推荐生产标准配置(示例)

bind 0.0.0.0
port 6379
maxmemory 16gb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
tcp-backlog 65535

七、总结一句话

Redis 优化 = 不让他用 swap + 控制内存 + 避免大 Key + 合理的持久化 + 架构拆分


如果你愿意,可以告诉我:

  • Redis 版本
  • 数据量
  • QPS
  • 是否做持久化
  • 单机还是集群

我可以给你 直接可用的 redis.conf 生产配置

0