面试题答案
一键面试主节点处理过期键方式
- 定期删除:主节点会定期随机抽取一部分设置了过期时间的键,检查这些键是否过期,如果过期则删除。这是一种通过牺牲一定CPU时间来换取内存空间的策略,避免了大量过期键占用过多内存。
- 惰性删除:当客户端访问一个键时,主节点会检查该键是否过期。如果过期,就会删除该键并返回相应信息(如
nil
)。这种方式不会主动删除过期键,只有在访问时才进行检查和删除,减少了删除操作对CPU的影响。
从节点处理过期键方式
- 从节点不会主动处理过期键,即使键已经过期,从节点也不会对其进行定期删除或惰性删除操作。
- 从节点过期键的删除完全依赖主节点。当主节点删除一个过期键后,会向所有从节点发送一个
DEL
命令,从节点接收到该命令后才会删除相应的键。
对数据一致性的影响
- 短期不一致:由于从节点不会主动删除过期键,在主节点删除过期键但还未将
DEL
命令发送到从节点这段时间内,主从节点数据存在不一致。此时从节点可能返回已过期但尚未删除的键对应的值,而主节点则返回nil
。 - 最终一致性:从节点接收到主节点发送的
DEL
命令后,会删除相应过期键,从而保证主从节点数据最终达到一致。在高并发环境下,从节点可能会短时间内返回过期数据,但随着主节点DEL
命令的传播,这种不一致情况会得到解决。