面试题答案
一键面试定时删除
- 原理:在设置键的过期时间时,同时创建一个定时器,当过期时间到达时,由定时器立即执行对该键的删除操作。
- 优点:能及时释放过期键占用的内存,对内存友好,保证内存不会因为大量过期键而持续膨胀。
- 缺点:创建和管理定时器有额外的CPU开销,尤其是在大量键同时过期的情况下,会给CPU带来较大压力,影响系统整体性能。
惰性删除
- 原理:键过期时不会立即删除,而是在每次访问该键时,检查该键是否过期,如果过期则删除,并返回相应错误信息(如
nil
)。 - 优点:对CPU友好,只有在访问键时才进行过期检查和删除操作,不会集中消耗CPU资源处理过期键。
- 缺点:如果过期键长时间未被访问,会一直占用内存,导致内存不能及时释放,可能引发内存泄漏问题。
定期删除
- 原理:Redis会定期(如每100毫秒)随机抽取一些设置了过期时间的键进行检查,删除其中过期的键。抽取的键数量和检查频率可通过配置参数调整。
- 优点:是一种折中的方案,兼顾了内存和CPU性能。既不会像定时删除那样大量消耗CPU,也不会像惰性删除那样长时间占用内存。
- 缺点:若抽取的键中过期键比例较高,可能导致一次定期删除操作执行时间较长,影响系统短暂性能;另外,若抽取的键中过期键过少,又不能很好地释放内存。
故障恢复机制与删除策略的相互作用
- 持久化方式与故障恢复:Redis有RDB和AOF两种持久化方式。RDB是定期将内存数据快照保存到磁盘,AOF是将写命令追加到日志文件。当发生故障重启时,RDB会根据最后一次快照文件恢复数据,AOF则会重放日志文件中的命令来恢复数据。
- 与定时删除的相互作用:定时删除在故障恢复后,原有的定时器信息不会保留。重启后,对于设置了过期时间的键,会按照重启后的删除策略(通常为惰性删除 + 定期删除)进行处理。由于重启前定时删除已删除的键不会出现在持久化文件中,所以不会影响数据一致性。
- 与惰性删除的相互作用:故障恢复后,惰性删除机制不受影响,仍然在每次访问键时检查是否过期并删除。因为持久化文件中记录的是故障前的数据状态,重启后首次访问过期键时,惰性删除会将其删除,保证数据一致性。
- 与定期删除的相互作用:重启后,定期删除机制会按照配置继续定期检查和删除过期键。对于故障前未删除的过期键,通过定期删除在后续操作中逐步清理,确保内存的合理使用和数据一致性。在AOF重写过程中,也会对过期键进行处理,不会将已过期的键重写到新的AOF文件中,进一步保证了数据一致性。