回答
这里要分为主节点和从节点两个部分介绍。
主节点对过期键的处理
Redis 主节点对过期键的处理采用一种“延迟释放”的策略,当 key 过期后,它的内存并不一定会立刻释放,而是等待合适的机会再释放。这种“延迟释放”的策略,Redis 有两种方案:
- 惰性删除:当你尝试访问一个 Key 时,Redis 会首先检查这个 Key 是否过期,如果过期则返回 null 并删除它,如果没有过期则返回数据。
- 定期删除:Redis 每隔一段时间随机抽取一部分过期数据,然后删除这些过期数据。
从节点对过期键的处理
在主从架构中,从节点对过期键的处理会有一点特殊。
从节点上 key 的过期时间和主节点保持一致,但即便 key 已过期,从节点也不会主动地去删除这些过期的 key,而是通过同步主节点的删除操作来进行。无论主节点是通过惰性删除还是定期删除,这个删除操作会被记录在主节点的 AOF 文件中(如果已开启 AOF),同时也会同步这个命令给从节点。