删除和淘汰机制

未匹配的标注

删除策略

key 到期后, 并不会立即删除, 会有以下两种删除策略:

  1. 定期删除:

    • Redis 每隔一段时间就会去查看下 Redis 中设置了过期时间的 key, 会在 100ms 的间隔中默认查看 3 个 key
  2. 惰性删除:

    • 如果去查询一个已经过期的 key 时, Redis 会先查询当前的 key 是否已经过期, 如果已经过期, 那么会直接删除 key, 同时返回给用户一个空值 (内存不友好, CPU 友好)
  3. 定时过期:

    • 每个设置了过期时间的 key 都创建一个定时器, 到期自动清除 (内存友好, CPU 不友好)

    淘汰机制

  • Redis 的内存已经满的时候, 如果又添加了一个数据的话, 那么就会执行淘汰机制- 一共有 8 中淘汰机制

    1. volatile-lru:

      • 在内存不足的时候, Redis 会在设置了过期时间的 key 中干掉一个最近最少使用的 key
    2. allkeys-lru:

      • 在内存不足时, Redis 会在全部的 key 中干掉一个最近最少使用的 key
    3. volatile-lfu:

      • 在内存不足的时候, Redis 会在设置了过期时间的 key 中干掉一个最近最少频次使用的 key
    4. allkeys-lfu:

      • 在内存不足时, Redis 会在全部的 key 中干掉一个最近最少频次使用的 key
    5. volatile-random:

      • 在内存不足的时候, Redis 会在设置了过期时间的 key 中随机干掉一个 key
    6. allkeys-random:

      • 在内存不足时, Redis 会在全部的 key 中随机干掉一个 key
    7. volatile-ttl:

      • 在内存不足的时候, Redis 会在设置了过期时间的 key 中干掉一个剩余生存时间最少的 key
    8. noeviction:

      • 在内存不足的时候, 直接报错 (Redis 默认的淘汰策略)

  • 指定淘汰策略的方式: 在 Redis 的配置文件中:

    • maxmemory-policy: 具体策略
  • 设置 Redis 的最大内存: maxmemory <bytes>, 单位是字节

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~