面试官:Redis 过期删除策略和内存淘汰策略有什么区别?.doc
Redis 过期删除策略和内存淘汰策略的区别 Redis 是一个高效的 NoSQL 数据库,可以对 key 设置过期时间,以便删除已过期的键值对。然而,Redis 还有一个内存淘汰策略,用于删除 Redis 中的键值对以释放内存。那么,过期删除策略和内存淘汰策略有什么区别呢? 过期删除策略是指 Redis 删除已过期的键值对的机制。 Redis 提供了多种方式来设置 key 的过期时间,例如使用 expire、pexpire、expireat 和 pexpireat 命令。同时,Redis 也提供了多种方式来查看和取消 key 的过期时间,例如使用 TTL 和 PERSIST 命令。 过期删除策略的实现机制是通过过期字典(expires dict)来实现的。过期字典是一个哈希表,用于存储所有键的过期时间。当我们查询一个 key 时,Redis 首先检查该 key 是否存在于过期字典中,如果存在,则获取该 key 的过期时间,并与当前系统时间进行比对,如果比系统时间大,那就没有过期,否则判定该 key 已过期。 然而,过期删除策略并不是唯一的删除机制,Redis 还有一个内存淘汰策略。当 Redis 的内存使用率超过一定的阈值时,会触发内存淘汰策略,以删除一些键值对来释放内存。内存淘汰策略的触发条件和过期删除策略的触发条件不同,前者是根据内存使用率,后者是根据 key 的过期时间。 过期删除策略有多种,例如定时删除、惰性删除和定期删除。定时删除策略是在设置 key 的过期时间时,同时创建一个定时事件,当时间到达时,由事件处理器自动执行 key 的删除操作。惰性删除策略是在每次访问 key 时,检查该 key 是否已经过期,如果已经过期,则删除该 key。定期删除策略是在一定的时间间隔内,检查所有键的过期时间,并删除已过期的键。 过期删除策略和内存淘汰策略是两个不同的机制,前者用于删除已过期的键值对,后者用于释放内存。了解这两个机制的区别和实现机制,可以帮助我们更好地使用 Redis。