redis的内存淘汰策略和过期策略区分及LRU和LFU的区别

触发机制

内存淘汰策略是在内存不足时触发的,而过期键删除是常规的清理机制。

设置方式

        内存淘汰策略:

                修改redis.conf      

# 设置最大内存(例如 100MB)
maxmemory 100mb
# 设置淘汰策略(例如 allkeys-lru)
maxmemory-policy allkeys-lru
  • 淘汰策略选项:基本四种----lru lfu random  ttl

    • noeviction: 不淘汰,返回错误(默认)

    • allkeys-lru: 全体 Key 使用 LRU 算法淘汰

    • volatile-lru: 仅过期 Key 使用 LRU 淘汰

    • allkeys-lfu: 全体 Key 使用 LFU 算法淘汰(Redis 4.0+)

    • volatile-lfu: 仅过期 Key 使用 LFU 淘汰

    • allkeys-random: 全体 Key 随机淘汰

    • volatile-random: 仅过期 Key 随机淘汰

    • volatile-ttl: 淘汰剩余存活时间最短的 Key

重启redis服务

                过期策略设置---定期删除+惰性删除

修改redis.conf

# 控制定期删除的执行频率(默认 10,范围 1~500)
hz 10

# Redis 7.0+ 新增参数,调整定期删除的强度(默认 1,范围 1~10)
active-expire-effort 1
  • 惰性删除:
    • 工作机制:当客户端尝试访问某个 Key 时,Redis 会检查该 Key 是否已过期。如果 Key 已过期,直接删除并查询数据库。如果 Key 未过期,正常返回数据。
    • 特点:
      • Redis 默认启用惰性删除,无法关闭。
      • 若过期 Key 长期未被访问,会占用内存,需依赖定期删除补充。
  • 定期删除:
    • 工作机制:Redis 周期性(默认每秒 10 次)随机抽取部分过期 Key 进行清理。
      • 从设置了过期时间的 Key 中,随机选择 20 个 Key 检查。

      • 删除其中已过期的 Key。

      • 如果本轮删除的 Key 比例超过 25%,重复选择删除步骤,直到比例低于 25% 或超过 25ms 执行时间限制。

LRU和LFU

LRU:Least Recently Used

  • 该算法认为最近被访问过的数据,在将来被访问的几率最大。-------即只关注访问时间,删除访问/插入时间最久远的数据。需要维护访问时间数据
算法 优点 缺点
LRU 实现简单,对突发访问敏感(保护新热点)。 可能误删周期性访问的旧数据(如“历史热点”)。
LFU 保护长期高频访问的数据(如稳定热点)。 对突发新数据不友好(需积累访问次数才能留存)。

LFU:Least Recently Use

  • 该算法认为一定时期内被访问次数最少的页,在将来被访问到的几率也是最小的。------即关注访问的频率,删除访问频率最低的数据。需要维护该数据的访问频率

你可能感兴趣的:(redis,数据库,缓存)