Redis 中数据的过期策略和淘汰策略

过期策略

Redis 会把设置了过期时间的 key 放入一个独立的字典里,在 key 过期时并不会立刻删除它。

Redis 会通过如下两种策略,来删除过期的key:

  • 惰性删除
    • 客户端访问某个 key 时,Redis 会检查该 key 是否过期,若过期则删除
  • 定期扫描
    Redis 默认每秒执行 10 次过期扫描(配置hz选项),扫描策略如下:
1. 从过期字典中随机选择 20 个 key;
2. 删除这 20 个 key 中已过期的 key;
3. 如果过期的 key 的比例超过 25%,则重复步骤 1;

淘汰策略

当 Redis 占用内存超出最大限制(maxmemory)时,可采用如下策略(maxmemory-policy)

让 Redis 淘汰一些数据,以腾出空间继续提供读写服务:

  • noeviction: 对可能导致增大内存的命令返回错误(大多数写命令,DEL除外)
  • volatile-ttl: 在设置了过期时间的 key 中,选择剩余寿命(TTL)最短的 key,将其淘汰
  • volatile-lru: 在设置了过期时间的 key 中,选择最少使用的 key,将其淘汰
  • volatile-random: 在设置了过期时间的 key 中,随机选择一些 key,将其淘汰
  • allkeys-lru: 在所有的 key 中,选择最少使用的 key,将其淘汰
  • allkeys-random: 在所有的 key 中,随机选择一些 key,将其淘汰
  1. LRU 算法
    • 维护一个链表,用于顺序存储被访问过的key。
    • 在访问数据时,最新访问过的 key 将被移动到表头
    • 即最近访问的 key 在表头,最少访问的 key 在表尾
  1. 近似 LRU 算法(Redis)
    • 给每个 key 维护一个时间戳,淘汰时随机采样 5 个key,从中淘汰掉最旧的key。如果还是超出内存限制,则继续随机采样淘汰
    • 优点:比 LRU 算法节约内存,却可以取得非常近似的效果
上一篇:全网首发:多个mimetypes xml设置某种文件类型的不同图标,LINUX怎样确定使用哪个


下一篇:设置Windows默认中文、Putty掉线解决、SublimeText3常用设置