Redis配置优化性能的核心方向与具体措施
内存是Redis的性能核心,合理的内存配置能有效避免OOM(Out of Memory)和频繁GC。
maxmemory
参数设置Redis使用的最大内存(如4GB服务器可设为3gb
,预留20%-30%给系统和其他进程),避免内存耗尽导致服务崩溃。maxmemory-policy
: allkeys-lru
(淘汰最近最少使用的键);volatile-lru
(仅对设置了过期时间的键淘汰);volatile-ttl
(淘汰即将过期的键)。Hash
替代多个String
(如存储用户信息,将user:1:name
、user:1:age
合并为user:1
的Hash字段,减少Key数量和内存开销);Ziplist
编码(如hash-max-ziplist-entries 512
、list-max-ziplist-size -2
,降低内存占用);Stream
(替代List
,支持高效追加和消费)。activedefrag yes
(Redis 4.0+)自动整理内存碎片,或定期用MEMORY PURGE
手动清理(需谨慎,可能阻塞服务)。tcp-backlog
(如tcp-backlog 2048
),匹配系统net.core.somaxconn
(如sysctl -w net.core.somaxconn=2048
),避免高并发时连接队列溢出;timeout 300
(空闲连接超时时间,秒),关闭长期闲置连接,释放资源;maxclients
(如maxclients 10000
),支持更多并发客户端。save
策略(如save 3600 1
,1小时内至少1次修改触发),减少频繁快照对性能的影响;启用rdbcompression yes
(压缩RDB文件,节省磁盘空间);设置dbfilename dump.rdb
和dir
(指定保存路径)。appendfsync everysec
(每秒同步一次,平衡性能与数据安全);启用aof-use-rdb-preamble yes
(混合持久化,结合RDB的紧凑性和AOF的安全性);设置auto-aof-rewrite-percentage 100
(AOF文件增长100%时重写)和auto-aof-rewrite-min-size 64mb
(最小重写大小),避免频繁重写。io-threads 4
(根据CPU核心数调整,通常为CPU核心数-1
),io-threads-do-reads yes
(启用多线程读),提升高并发下的吞吐量;jemalloc-bg-thread yes
(默认开启),减少内存碎片整理对主线程的影响。MGET/MSET
替代多次GET/SET
(如批量获取10个键:MGET key1 key2 ... key10
),降低网络延迟;使用Pipeline
(如redis-cli --pipe
)将多个命令打包发送,减少RTT(Round-Trip Time)。KEYS *
(线性扫描所有Key,阻塞服务),用SCAN
命令(增量遍历,如SCAN 0 COUNT 100
,每次返回100个Key);设置slowlog-log-slower-than 10000
(慢查询阈值,单位微秒,默认10毫秒),slowlog-max-len 128
(慢查询日志最大长度),定期分析慢查询日志(SLOWLOG get
),优化慢命令。replicaof <master-ip> <master-port>
),将读请求分发到从节点,减轻主节点压力;设置replica-read-only yes
(从节点只读),避免数据不一致。cluster-enabled yes
),将数据分散到多个节点(至少3个主节点,每个主节点1个从节点),提升存储容量和并发处理能力;选择合适的分片策略(如一致性哈希),避免数据倾斜。INFO
命令(如INFO memory
查看内存使用、INFO clients
查看客户端连接、INFO persistence
查看持久化状态)监控关键指标;部署Prometheus+Grafana(收集redis_exporter
数据),可视化监控内存、QPS、延迟等指标,及时发现异常。redis-cli --bigkeys
找出内存占用大的Key(如超过10MB),拆分或优化;TTL
(如EXPIRE key 3600
,1小时过期),避免内存堆积;BGREWRITEAOF
(如每天凌晨),压缩AOF文件大小,提升恢复速度。