面试题答案
一键面试1. 何时检测过期键
- 读写操作时:当执行读(如
GET
)或写(如SET
)等命令操作键时,Redis 会先检查该键是否过期。如果键已过期,读操作会返回nil
,写操作则正常执行(会覆盖过期键)。这确保了对过期键的访问不会返回错误数据,同时也保证新数据写入不受过期状态影响。 - 定期删除:Redis 内部有一个定期删除策略,会定期随机抽取一部分键进行过期检查并删除过期键。这有助于及时释放内存,避免过期键长期占用内存资源。
2. AOF 文件中过期键状态变更体现
- AOF 重写:在 AOF 重写过程中,过期键不会被写入新的 AOF 文件。因为重写是基于当前数据库状态生成一个简化且有效的 AOF 文件,过期键已经不在数据库中,所以不会被包含。例如,原 AOF 文件中有
SET key value
及后续过期相关指令,重写时若key
已过期,则新 AOF 文件不会包含key
相关指令。 - 正常写入:当键过期时,不会在 AOF 文件中专门记录键过期这一事件。因为 AOF 文件记录的是命令,当键过期后,后续对该键的操作(如读操作返回
nil
),实际执行的命令并没有改变(还是GET key
),只是返回结果不同。所以 AOF 文件按正常命令记录,从命令执行及返回结果能间接体现键过期后的状态。