您的位置:首页 > 财经 > 金融 > Java面试八股之Redis缓存淘汰策略

Java面试八股之Redis缓存淘汰策略

2024/12/23 14:09:49 来源:https://blog.csdn.net/u012151345/article/details/140436324  浏览:    关键词:Java面试八股之Redis缓存淘汰策略
  1. Redis缓存淘汰策略

Redis提供了多种缓存淘汰策略,用于在内存容量达到最大限制时决定如何移除旧数据以腾出空间存放新数据。这些策略可以根据实际业务需求选择,以最大程度地优化缓存效果。以下是Redis支持的缓存淘汰策略:

noeviction(默认策略)

当内存不足以容纳新写入数据时,不进行数据淘汰,而是直接返回错误(除了部分特殊命令如DEL)。这意味着在内存饱和的情况下,写入操作将失败,防止了数据丢失,但可能导致部分写请求无法完成。

allkeys-lru(Least Recently Used,最近最少使用)

从整个数据集中(包括未设置过期时间的键)移除最近最少使用的键。LRU策略假设最久未访问的数据在未来被访问的可能性最小,因此优先淘汰这些数据。这是一种常用的优化缓存命中率的策略。

volatile-lru

只对设置了过期时间(TTL)的键进行操作,移除最近最少使用的键。当内存不足时,优先淘汰这些有过期时间且最近访问较少的键,保留未设置过期时间的键不受影响。

allkeys-random(随机淘汰)

在内存不足时,随机选择并移除任意一个键。这种方法简单且公平,但缺乏对数据访问模式的考虑,不适用于需要优先保留热点数据的场景。

volatile-random

同样仅针对设置了过期时间的键,但在内存不足时,随机选择并移除其中一个。这种策略适用于无需关心数据访问频率,仅希望对有过期时间的键进行随机淘汰的情况。

volatile-ttl

只针对设置了过期时间的键,优先淘汰剩余存活时间(TTL)最短的键。这种策略假设即将过期的数据价值较低,倾向于保留存活时间较长的键。它有助于保持缓存中数据的新鲜度,适用于对数据时效性要求较高的场景。

volatile-lfu(Least Frequently Used,最不经常使用)

只对设置了过期时间的键进行操作,移除访问频率最低的键。LFU策略根据数据的历史访问频率来决定淘汰对象,理论上能更好地识别长期未被访问但偶尔会被访问的数据。

allkeys-lfu

从整个数据集中移除访问频率最低的键,不论其是否设置了过期时间。LFU策略适用于希望长期保留那些虽然访问频率不高但每次访问都十分重要的数据。

请注意,以上策略中的volatile-系列仅针对设置了过期时间的键进行操作,而allkeys-系列则涵盖了所有键。另外,lfu策略是Redis 4.0之后新增的特性,提供了基于访问频率的淘汰策略。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com