redis淘汰设置

2周前 (04-16 10:54)阅读42回复0
admin
admin
  • 管理员
  • 注册排名1
  • 经验值160
  • 级别管理员
  • 主题32
  • 回复0
楼主

Redis 的 maxmemory-policy 用于配置当内存达到 maxmemory 限制时,Redis 选择淘汰哪些键以释放内存。除了 allkeys-lru,Redis 还支持多种内存淘汰策略,具体如下:


1. noeviction

  • 作用:当内存不足时,新写入操作会返回错误(如 OOM command not allowed when used memory > 'maxmemory'),不淘汰任何键

  • 适用场景:数据不允许丢失的场景(如持久化存储的核心数据)。

  • 注意:这是 Redis 的默认策略



2. volatile-lru

  • 作用:对设置了过期时间(TTL)的键,使用 LRU 算法(Least Recently Used,最近最少使用)淘汰最近最少访问的键。

  • 适用场景:部分数据允许淘汰(如缓存),但需要优先保留热点数据。



3. allkeys-lru

  • 作用:对所有键(无论是否设置过期时间)使用 LRU 算法淘汰最近最少访问的键。

  • 适用场景:所有数据均可淘汰,希望基于访问频率保留热点数据(如纯缓存场景)。



4. volatile-lfu(Redis 4.0+)

  • 作用:对设置了过期时间的键,使用 LFU 算法(Least Frequently Used,最不经常使用)淘汰访问频率最低的键。

  • 适用场景:需要更精准识别冷门数据,避免偶发访问影响淘汰结果。



5. allkeys-lfu(Redis 4.0+)

  • 作用:对所有键使用 LFU 算法淘汰访问频率最低的键。

  • 适用场景:所有数据均可淘汰,且希望基于访问频率优化淘汰策略。



6. volatile-ttl

  • 作用:对设置了过期时间的键,优先淘汰剩余生存时间(TTL)最短的键。

  • 适用场景:需要优先淘汰即将过期的键(如短期缓存)。



7. volatile-random

  • 作用:从设置了过期时间的键随机选择淘汰。

  • 适用场景:对淘汰精度要求不高,但需要快速决策。



8. allkeys-random

  • 作用:从所有键随机选择淘汰。

  • 适用场景:所有数据均可淘汰,且对淘汰策略无特殊要求。



如何选择策略?

  1. 数据是否允许淘汰

    • 若所有数据都可淘汰,优先选择 allkeys-* 策略。

    • 若部分数据重要不可淘汰,选择 volatile-* 策略,并为可淘汰数据设置 TTL。

  2. 数据访问模式

    • 有明显热点数据:allkeys-lru 或 allkeys-lfu

    • 需要精准淘汰冷门数据:allkeys-lfu 或 volatile-lfu

    • 数据短期有效:volatile-ttl

  3. 版本兼容性

    • LFU 策略(volatile-lfu/allkeys-lfu)需 Redis 4.0+。


配置示例

解释# 在 redis.conf 中设置(或通过 CONFIG SET 命令动态调整)maxmemory 2gb
maxmemory-policy a

根据业务需求选择合适策略,可显著优化 Redis 的内存效率和性能。


以上内容仅代表作者观点,甚至可能并非原创,如遇未经考证信息需持审慎态度。若有疑问,可联系本站处理。

本文地址:http://www.chengmang.com/2025/04/37.html

0
回帖 返回php板块

redis淘汰设置 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息