三种过期策略

  • 定时删除(定时器)占用 cpu 去轮询:内存友好,CPU 不友好
  • 惰性删除:内存不友好,CPU 友好
  • 定期删除:定期检查 key 进行删除(可配置一次检查的 key 的数量,以及可接收的过期 key 的比例,符合则不进行下一批 key  的删除)

主从结构中的过期

  • 主节点删除 key 的时候会发送 del 命令给其他的节点(从节点不会主动删除过期键,而是等待主节点的一个 del 命令)
  • 从库中的 key 的时效性由惰性检查完成

内存淘汰机制

当内存达到限制之后 redis 如何删除 key。

  • volatile-lru:淘汰存在时间中最久未使用的 key
  • allkeys-lru:所有 key 中最久未使用的
  • volatile-random:随机淘汰存在过期时间的 key
  • allkeys-random:所有 key 中进行随机的淘汰
  • volatile-ttl:淘汰最早过期的键
  • noeviction:拒绝新增操作
  • volatile-lfu:淘汰存在过期时间的最少使用的 key
  • allkeys-lfu:所有 key 中最少使用的淘汰

可能你会非常好奇 redis 一个单线程的应用是如何做到的,答案是事件队列(利用事件驱动),可以参考:Redis事件驱动模型 - 知乎 (zhihu.com)