CentOS 上 Redis 配置与性能的关键关系
一 内存与持久化
- 设置 maxmemory 并选择恰当的 maxmemory-policy(如 volatile-lru、allkeys-lru),可在内存触顶时避免 OOM 并控制驱逐对延迟的影响;将实例内存控制在较小规模(如不超过10GB)有助于缩短 fork 子进程时间,降低 RDB/AOF rewrite 带来的延迟波动。纯缓存场景可按需关闭 AOF 或仅在从节点执行备份。AOF 的 appendfsync 策略直接决定写性能与安全性的权衡:always 最安全但吞吐最低,no 性能最好但宕机可能丢失较多数据,everysec 为常用折中(极端 IO 压力下仍可能阻塞)。RDB 的 save 频率越高,后台快照越频繁,对延迟与 CPU/IO 的压力越大。为降低主从全量同步概率,可适当增大 repl-backlog-size。此外,建议关闭透明大页(THP),避免写时复制(COW)放大延迟,检查与关闭方式:cat /sys/kernel/mm/transparent_hugepage/enabled;echo never > /sys/kernel/mm/transparent_hugepage/enabled。最后,设置 vm.overcommit_memory=1 可降低 fork 失败风险。
二 网络与连接
- 提高 tcp-backlog(如 511 或更高)与内核 net.core.somaxconn,可提升高并发接入时的连接排队能力;增大 net.ipv4.tcp_max_syn_backlog 与 net.ipv4.ip_local_port_range,有助于缓解短连接/高并发场景的端口与半连接压力。为降低 Nagle 合并带来的小包延迟,可在客户端或内核启用 TCP_NODELAY;开启 TCP_KEEPALIVE 有助于及早清理僵死连接。系统层面需提升文件描述符上限(如 limits.conf 中设置 redis 用户 nofile 65535),避免 “Too many open files”。安全与拓扑方面,按需绑定 bind 与设置 requirepass,并在需要时采用 Redis 集群扩展吞吐与可用性。
三 慢查询与数据结构
- 通过 slowlog-log-slower-than(如 10000 微秒)与 slowlog-max-len(如 128)识别耗时命令并持续优化;遍历大键空间时使用 SCAN 替代 KEYS,避免阻塞。合理选择数据结构(如用 Hash 存储对象而非多个独立 Key),并对大 Key/大 Value 进行拆分,降低单次操作与网络放大。客户端侧使用连接池复用连接,减少握手与销毁开销。
四 监控与迭代
- 利用 INFO 与慢查询日志持续观测命中率、延迟、持久化状态与复制偏移;结合 Prometheus + Grafana 等构建可视化监控与告警,围绕关键指标(如延迟、命中率、evicted_keys、aof_delayed_fsync、sync_full/sync_partial_err)做闭环调优。任何配置变更应先在测试环境验证,再灰度上线,并保留回滚方案。
五 配置示例与适用场景
- 纯缓存、极致吞吐(允许丢失最近数据):禁用 AOF(appendonly no),RDB 采用低频快照(如 save 900 1、300 10、60 10000),maxmemory-policy 设为 allkeys-lru 或 volatile-lru,开启 TCP_NODELAY,关闭 THP,调高 tcp-backlog/somaxconn 与文件描述符。
- 高可靠、低丢失(容忍秒级):启用 AOF(appendonly yes)并选择 appendfsync everysec,RDB 低频快照,适当增大 repl-backlog-size,保持 THP 关闭与 vm.overcommit_memory=1,结合监控与慢查询持续优化。