一、合理设置Redis内存大小
Redis的内存设置需结合物理机资源与业务场景,核心原则是避免内存溢出同时保留系统冗余。
config get maxmemory
(返回字节值);查看实际内存使用:info memory
(used_memory_human
字段)。redis.conf
文件,找到maxmemory
参数(如maxmemory 1073741824
表示1GB);临时修改(重启失效):通过命令config set maxmemory 1073741824
。二、配置内存淘汰策略
当Redis内存达到maxmemory
限制时,需通过淘汰策略释放空间,避免写入报错(OOM)。常见策略及适用场景:
OOM command not allowed
)。仅适用于数据绝对不能丢失的场景(如实时交易系统),但需严格监控内存使用。allkeys-lfu
:淘汰最不经常使用(LFU)的key,适合长期缓存但访问频率差异大的场景(如历史数据查询);allkeys-random/volatile-random
:随机淘汰key,实现简单,但命中率较低,适用于对数据一致性要求低的场景。allkeys-lru
或volatile-lru
;volatile-lru
或volatile-ttl
(淘汰即将过期的key);noeviction
(除非数据绝对不能丢失)。三、优化内存使用的额外措施
SCAN
命令替代KEYS
命令避免遍历大Key。user:1:{name: "张三", age: 25}
代替user:1:name
、user:1:age
;tag:news:{科技, 体育, 娱乐}
代替多个tag:news:1
、tag:news:2
。jemalloc
(Redis默认内存分配器)自动压缩内存,减少碎片率。可通过config set activedefrag yes
开启主动碎片整理(需Redis 4.0+)。INFO memory
命令监控used_memory
(已用内存)、mem_fragmentation_ratio
(内存碎片率,理想值为1.0-1.5)等指标;设置告警阈值(如内存使用率达80%时触发告警),及时扩容或优化。