✅ 触发条件
当redis执行写操作时,会检查当前内存使用是否超过 maxmemory:
未超过: 正常执行操作。
已超过: 触发内存淘汰策略,删除部分数据后再执行新操作。
✅ 淘汰策略
redis提供了8种淘汰策略可通过配置 maxmemory-policy 指定(默认 noeviction),分为以下几类:
✔ noeviction: 不淘汰任何key,但是内存满时不允许写入新数据(默认就是这种策略)。
✔ allkeys-random: 对全体key,随机进行淘汰。
✔ allkeys-lru: 对全体key,基于LRU算法进行淘汰。
✔ allkeys-lfu: 对全体key,基于LFU算法进行淘汰。
✔ volatile-random: 对设置了TTL的key ,随机进行淘汰。
✔ volatile-lru: 对设置了TTL的key,基于LRU算法进行淘汰。
✔ volatile-lfu: 对设置了TTL的key,基于LFU算法进行淘汰。
✔ volatile-ttl: 对设置了TTL的key,比较key的剩余TTL值,TTL越小越先被淘汰。
✅ LRU 与 LFU 的区别
❒ LRU(Least Recently Used)最近最少使用: 用当前时间减去最后一次访问时间,这个值越大则淘汰优先级越高。
❒ LFU(Least Frequently Used)最少频率使用: 会统计每个key的访问频率,值越小淘汰优先级越高。
✅ 配置方式
maxmemory 100mb # 设置最大内存(如 100MB)
maxmemory-policy allkeys-lru # 设置淘汰策略
✅ 策略选择建议
✔ 纯缓存场景(如缓存数据库查询结果):推荐 allkeys-lru 或 allkeys-lfu,优先保留热点数据。
✔ 既有缓存又有持久化数据(部分键需永久保留):推荐 volatile-lru 或 volatile-lfu,仅淘汰临时缓存键。
✔ 对过期时间敏感:如定时任务相关的键,可选择 volatile-ttl,优先淘汰即将过期的键。
✔ 数据不允许丢失:使用默认的 noeviction,但需监控内存使用,避免写操作失败。