面试题答案
一键面试Redis常用过期键删除策略
- 惰性删除:键值在被访问时,如果发现已过期,则进行删除操作。
- 定期删除:Redis会定期从过期字典中随机抽取一定数量的键进行检查,并删除其中已过期的键。
- 内存淘汰机制:当Redis内存使用达到一定阈值(maxmemory)时,会根据设置的淘汰策略(如volatile-lru、allkeys-lru等)删除部分键值对,以此来释放内存,淘汰策略可能涉及到过期键和未过期键。
惰性删除优缺点
- 优点:
- 节省CPU资源:只有在键被访问时才检查是否过期并删除,不会在键过期时立即消耗CPU资源,避免了集中式的删除操作对CPU的压力。
- 简单高效:实现逻辑简单,只需要在每次访问键时增加一个过期检查逻辑即可。
- 缺点:
- 浪费内存:如果过期的键长时间未被访问,会一直占用内存空间,导致内存使用效率降低,尤其在过期键数量较多的情况下,可能造成内存浪费,甚至导致内存不足。
- 存在数据不一致:在键过期到被访问删除这段时间内,数据实际已经过期但仍然可以被访问到,可能会导致业务逻辑上的数据不一致问题。
定期删除优缺点
- 优点:
- 内存友好:通过定期随机检查并删除过期键,能够及时释放过期键占用的内存,避免大量过期键长时间占用内存,提高了内存的使用效率。
- 减少数据不一致性:相比于惰性删除,定期删除能在一定程度上减少过期键在过期后仍被访问的时间窗口,降低数据不一致的可能性。
- 缺点:
- CPU压力:定期执行删除操作会占用CPU资源,如果设置的检查频率过高、每次检查的键数量过多,可能会对Redis的性能产生影响,尤其是在高并发环境下,可能会导致Redis响应时间变长。
- 删除不彻底:由于是随机抽取部分键进行检查,可能会遗漏一些过期键,导致部分过期键不能及时被删除,仍然存在一定程度的内存浪费和数据不一致问题。