如何优化Ubuntu Redis的性能
小樊
31
2025-12-10 19:47:04
Ubuntu 上优化 Redis 性能的实用清单
一 系统层优化
- 使用最新稳定版 Redis,及时获得性能修复与安全改进。
- 选择更快的存储与网络:优先 SSD/NVMe,并确保网络带宽与延迟满足业务峰值。
- 调整内核网络参数以支撑高并发连接:提高 net.core.somaxconn(如 4096 或更高),并相应设置 Redis 的 tcp-backlog(常见 511)。
- 开启并保持足够的内存余量,尽量避免 swap,以减少抖动与停顿。
- 客户端侧使用连接池复用连接,降低握手与销毁开销。
二 Redis 配置优化
- 内存与淘汰策略
- 设置 maxmemory(如物理内存的约70%,视业务而定)。
- 选择 maxmemory-policy:通用缓存推荐 allkeys-lru;若键有过期时间可选 volatile-lru。
- 持久化策略
- 需要高吞吐时以 RDB 为主;需要更高数据安全时开启 AOF,并将 appendfsync 设为 everysec 平衡性能与安全。
- 合理设置 RDB 快照条件(如:save 900 1、save 300 10、save 60 10000),避免频繁快照带来抖动。
- 网络与连接
- 绑定内网地址(如 bind 10.x.x.x),开启 protected-mode;必要时仅开放白名单 IP。
- 设置 timeout 回收空闲连接;提高 tcp-keepalive(如 300 秒)保持长连接活性。
- 提升 maxclients,并配置合理的 client-output-buffer-limit(特别是对 replica、pubsub)。
- 慢查询与内部结构
- 开启慢查询日志:slowlog-log-slower-than 10000(10ms),slowlog-max-len 128。
- 启用惰性释放:lazyfree-lazy-eviction / lazyfree-lazy-expire / lazyfree-lazy-server-del / replica-lazy-flush,降低大 key 删除与大对象淘汰的阻塞。
- 事件循环与基线
- 适度提高 hz(如 10→100)以更及时处理后台任务(需结合 CPU 与负载测试)。
- 基线模板与关键参数位置:Ubuntu 常见配置路径 /etc/redis/redis.conf。
三 监控与压测闭环
- 实时监控:使用 redis-cli --stat 观察瞬时 QPS、内存与命中率;结合 INFO 输出关键指标(如 used_memory、evicted_keys、instantaneous_ops_per_sec、rejected_connections)。
- 可视化与告警:接入 Prometheus + Grafana 建立面板与阈值告警,持续跟踪延迟、命中率、连接数、持久化耗时等。
- 基准测试:用 redis-benchmark 验证调优成效,例如:
- 测试 GET 吞吐:redis-benchmark -t get -n 100000 -c 100 -q
- 逐步增加并发客户端数,观察 P95/P99 延迟拐点与错误率,以定位瓶颈。
四 架构与扩展
- 读写分离与复制:部署 主从复制,让从节点承担读流量,减轻主节点压力。
- 高可用:引入 Redis Sentinel 实现故障自动切换与通知。
- 水平扩展:数据量大或并发极高时采用 Redis Cluster 分片,分散热点与容量瓶颈。
- 安全与访问控制:为远程访问配置强密码(requirepass)、限制来源 IP(如 ufw 仅放行内网)、必要时重命名危险命令(如 FLUSHALL/FLUSHDB/SHUTDOWN)。
五 快速检查清单与示例命令
- 配置路径与生效
- 编辑:sudo vim /etc/redis/redis.conf
- 重启与验证:sudo systemctl restart redis && sudo systemctl status redis
- 防火墙放行(仅内网示例)
- sudo ufw allow from 10.0.0.0/8 to any port 6379
- 基线压测与监控
- 压测:redis-benchmark -t get,set -n 200000 -c 200 -q
- 实时观察:redis-cli --stat 与 INFO
- 关键参数示例(按业务调整)
- maxmemory 2gb
- maxmemory-policy allkeys-lru
- appendonly yes;appendfsync everysec
- tcp-backlog 511;tcp-keepalive 300
- slowlog-log-slower-than 10000;slowlog-max-len 128