Redis使用以下几种淘汰策略来管理内存空间:
默认情况下,Redis使用的是LRU(Least Recently Used,最近最少使用)淘汰策略。LRU策略会优先淘汰最近最少使用的数据,即当内存空间不足时,会将最久未被访问的键值对从内存中淘汰出去,以腾出空间给新的数据。
在Redis中,LRU策略的实现依赖于近似的LRU算法。它通过维护一个特殊的数据结构,记录每个键值对的访问时间顺序,从而决定哪些数据是最近最少使用的。
需要注意的是,默认情况下,LRU淘汰策略仅在Redis的内存使用达到maxmemory限制时才会触发。如果没有设置maxmemory,Redis将持续增加内存直到服务器崩溃。因此,在生产环境中,建议根据实际需求设置合适的maxmemory值,并根据业务特点选择合适的淘汰策略。
LRU(Least Recently Used,最近最少使用):当内存空间不足以容纳新写入数据时,优先淘汰最近最少使用的数据。
LFU(Least Frequently Used,最不经常使用):当内存空间不足以容纳新写入数据时,优先淘汰访问频率最低的数据。
Random(随机淘汰):随机选择要淘汰的数据。
TTL(Time To Live,生存时间):每个键可以设置一个过期时间,在到达过期时间时自动淘汰。
在实际应用中,可以根据具体需求选择合适的淘汰策略。默认情况下,Redis使用的是LRU策略。此外,还可以通过配置文件或命令来调整淘汰策略,以满足不同的业务需求。
-- **面试问**
当 Redis 中的 Key 过期时,如果对该 Key 执行 GET、SET、INCR 等操作,Redis 会将这些操作视为“Key 不存在”,因此 GET 操作会返回 nil 或空值。
需要注意的是,即使 Key 已过期,它也不会立即从 Redis 中删除,而是等到有客户端尝试访问它时,Redis 才会对该 Key 进行删除操作。这种机制称为惰性删除(Lazy Deletion)。
redis的淘汰策略
于 2023-10-20 15:10:12 首次发布