一、合理设置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%时触发告警),及时扩容或优化。