Redis配置文件中哪些参数影响性能
小樊
33
2025-12-16 12:14:28
影响 Redis 性能的配置项清单
一 内存与淘汰策略
maxmemory :设置实例可用的最大内存。生产常设为物理内存的70%–80% ;若开启AOF ,建议额外预留约20%给 AOF 重写,避免内存紧张导致频繁淘汰或阻塞。未设置或过大可能触发系统 swap ,性能急剧下降。
maxmemory-policy :内存触顶后的淘汰策略。缓存类优先用allkeys-lru ;仅对有过期时间的键可用volatile-lru/volatile-ttl ;数据不可丢用noeviction (写入将被拒绝)。
maxmemory-samples :LRU/LFU 采样数,默认5 。增大可提升淘汰决策质量,但会增加 CPU 开销。
内存碎片与编码:关注 mem_fragmentation_ratio (一般希望接近1.0–1.5 );合理设置小对象的紧凑编码阈值(如 hash-max-ziplist-entries / hash-max-listpack-entries 、zset-max-listpack-entries 、set-max-intset-entries ),在内存与 CPU 之间取平衡。
二 持久化 RDB 与 AOF
RDB(快照):由 save 规则或手动 BGSAVE 触发;快照由子进程完成,采用写时复制(COW) ,主进程仍可处理请求,但大数据集快照会占用额外内存与 I/O。可通过关闭或减少 save 频率、在从库 执行备份降低主库影响;权衡 rdbcompression (省空间、增 CPU)、rdbchecksum (校验开销)。
AOF(追加日志):通过 appendfsync 控制刷盘策略——always (最安全、性能最低)、everysec (推荐,最多丢1秒 )、no (性能最好、风险最高)。开启 auto-aof-rewrite-percentage / auto-aof-rewrite-min-size 可定期重写压缩 AOF;重写期间可启用 no-appendfsync-on-rewrite yes 减少 fsync 与重写 I/O 竞争。
混合持久化:启用 aof-use-rdb-preamble yes ,重写时以 RDB 头 + AOF 增量 存储,兼顾恢复速度与数据安全。
三 网络与连接
tcp-backlog :已完成三次握手的连接队列长度,默认511 。高并发入口建议提升到1024 或更高,并同步调大系统内核 net.core.somaxconn 与 net.ipv4.tcp_max_syn_backlog ,减少“connection refused”。
tcp-keepalive :保活探测间隔(秒),默认300 。缩短至60 可更快清理失效连接,减少 TIME_WAIT 与连接资源占用。
timeout :客户端空闲超时(秒),0 表示不超时。过长会占用连接资源,过短会增加握手与鉴权开销。
maxclients :最大客户端连接数。结合业务并发与内存预算设置,避免超过系统文件描述符限制。
client-output-buffer-limit :限制各类客户端输出缓冲,防止慢客户端拖垮实例。示例:普通客户端不限制;从库复制客户端 256mb 64mb 60 ;发布订阅客户端 32mb 8mb 60 (单位分别为硬限/软限/超时秒)。
四 线程模型与后台任务
io-threads / io-threads-do-reads (Redis 6.0+ ):开启 I/O 多线程可提升高并发下的网络读写吞吐。线程数常设为 CPU 核心数的1/2–1 ,并非越多越好。
bio 线程优先级 (Linux):如 bio_thread_priority 10 ,提升 AOF fsync、RDB 保存等后台任务的调度优先级,降低与前端请求的 I/O 争用。
五 诊断与可观测性相关参数
slowlog-log-slower-than / slowlog-max-len :记录执行时间超过阈值的命令并限制条数,用于定位慢查询与热点键访问模式。
监控指标:关注 keyspace_hits / keyspace_misses (命中率)、evicted_keys (淘汰数)、used_memory / mem_fragmentation_ratio (内存与碎片)、以及 latency 延迟,结合阈值(如命中率**>10**、平均响应**<1ms**)做持续优化。