三种过期策略
- 定时删除(定时器)占用 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)