面试题答案
一键面试- 过期字典存储
- Redis使用一个字典(称为过期字典)来存储所有设置了过期时间的键的过期时间戳。这个字典的键是指向键对象的指针,值是过期时间的毫秒数。
- 链表辅助作用
- 惰性删除:当客户端访问一个键时,Redis首先检查该键是否存在于过期字典中。如果存在且当前时间超过了过期时间,Redis会从数据库中删除该键。在这个过程中,链表并没有直接参与惰性删除的核心逻辑,但链表可以间接协助减少整体的内存使用,使得惰性删除在有大量过期键的情况下仍能有效工作。
- 定期删除:
- Redis会定期随机抽取一些设置了过期时间的键进行检查并删除过期键。为了提高效率,Redis使用了一个链表结构来管理这些过期键可能存在的数据库。
- 每个数据库都有一个过期键链表,这个链表将所有设置了过期时间的键按插入顺序连接起来。当进行定期删除时,Redis可以从这个链表中随机选取一定数量的键进行过期检查。这种链表结构使得Redis能够快速定位到可能过期的键,而不需要遍历整个数据库,从而实现高效的过期键管理。通过这种方式,在定期删除过程中,链表减少了检查过期键时的遍历范围,提升了过期键管理的效率。