温馨提示×

Redis在Ubuntu上如何调优

小樊
44
2025-12-28 11:50:04
栏目: 云计算

Ubuntu上Redis性能调优实战指南

一 系统层优化

  • 提升连接处理能力:调高内核网络参数,编辑 /etc/sysctl.conf,增加或调整为:
    • net.core.somaxconn=65535
    • net.ipv4.tcp_max_syn_backlog=4096
    • 应用后执行:sudo sysctl -p
  • 文件描述符上限:编辑 /etc/security/limits.conf,为运行 Redis 的用户(如 redis)增加:
    • redis soft nofile 65535
    • redis hard nofile 65535
  • 存储与内存:优先使用 SSD/NVMe;确保系统内存充足,避免 swap 抖动;NUMA 架构下绑定实例到单一 NUMA 节点以减少跨节点访问开销(如 numactl --cpunodebind=0 --membind=0)。
  • 资源隔离:为 Redis 配置 cgroups/CPU 亲和内存隔离,避免被其他进程抢占。

二 Redis配置优化

  • 内存与淘汰策略:设置合理上限与策略(示例为 /etc/redis/redis.conf
    • maxmemory 4gb
    • maxmemory-policy allkeys-lru(缓存场景);若需尽量不丢数据,可选 volatile-lru 并配合过期时间
  • 数据结构内存紧凑:启用 ziplist/intset 等紧凑编码阈值(按需微调)
    • hash-max-ziplist-entries 512
    • hash-max-ziplist-value 64
    • list-max-ziplist-size -2
    • set-max-intset-entries 512
    • zset-max-ziplist-entries 128
    • zset-max-ziplist-value 64
  • 持久化取舍与频率:
    • 仅缓存且可丢:可关闭持久化(save “” 且 appendonly no)
    • 兼顾性能与安全:RDB 快照适度(如 save 900 1 等),AOF 使用 appendfsync everysec
  • 网络与连接:
    • tcp-keepalive 300
    • timeout 300
    • 高并发建议启用 TCP_NODELAY(减少 Nagle 延迟)
    • 提升 backlog(如 tcp-backlog 511),与内核 somaxconn 匹配
  • 客户端与命令:
    • 客户端使用连接池复用连接
    • 读写尽量使用 Pipeline/MGET/MSET 批量操作
    • 删除大 key 使用 UNLINK 替代 DEL,避免阻塞主线程
  • 多核利用:单机多实例按 CPU 核心 拆分,每个实例绑定不同端口与 CPU 亲和,避免锁竞争

示例配置片段(按需合并到 redis.conf):

maxmemory 4gb
maxmemory-policy allkeys-lru
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
save 900 1
appendonly yes
appendfsync everysec
tcp-keepalive 300
timeout 300
tcp-backlog 511

应用配置:sudo systemctl restart redis-server;验证:redis-cli ping。

三 客户端与访问模式

  • 连接池:固定最小/最大连接数,启用连接复用健康检查,避免频繁建连/断连
  • 批量与管道:将多次小请求合并为 Pipeline 批量提交,减少 RTT 与系统调用
  • 避免大 Key 与热 Key:拆分 大 key、对 热 key 做本地缓存或分片,降低单键操作压力
  • 命令优化:减少高成本命令(如 SORT/ZUNIONSTORE 等)在 Redis 内执行,尽量在客户端完成计算或预处理
  • TLS 与访问控制:跨机房/公网建议启用 TLS;配合 requirepassbindprotected-modeufw 限制来源 IP

四 监控与持续优化

  • 内置与命令行:
    • 实时统计:redis-cli --stat
    • 慢查询:SLOWLOG GET(结合业务设置 slowlog-log-slower-than)
    • 运行时指标:INFO(关注 used_memory、evicted_keys、instantaneous_ops_per_sec、rejected_connections 等)
  • 可视化与告警:使用 Prometheus + Grafana 采集 Redis Exporter 指标,配置内存、命中率、延迟、拒绝连接等告警
  • 例行巡检:定期审计 大 key/热 key、慢查询、持久化耗时与 AOF 重写频率,结合压测验证参数变更效果

五 安全与常见陷阱

  • 安全基线:设置 强密码(requirepass)、仅开放必要来源 IP(ufw/安全组)、必要时启用 TLS;禁用危险命令(如 FLUSHALL/FLUSHDB 可改名或限制)
  • 持久化与恢复:RDB/AOF 配置不当易导致数据丢失重写抖动,建议定期备份、监控 AOF 重写与 RDB 快照耗时
  • 连接风暴:未设 timeout 或未用连接池,易出现 rejected_connections 与 TIME_WAIT 堆积,需结合连接池与内核参数治理
  • 变更流程:任何参数调整先在测试环境验证,灰度发布,观察 used_memory/evicted_keys/ops 等指标再全量上线

0