我们知道,在REDIS缓存已满后,您可以使用ounization策略删除数据以自由释放新数据。
消除策略如下所示:
编辑
重新记忆消除
设置到期时间密钥
这四种策略的数据范围是为过期的时间设置数据。
所有关键
当记忆不足时,这些关键值是否设置了到期时间,将消除这三个消除策略。
这意味着,即使其到期时间尚未到达,它也将被删除。当然,如果它已经通过了到期时间,即使没有被淘汰策略选择,它也会被删除。
这很简单。关键是它们参与了LRU算法和LFU算法。
苍凉
LRU算法是什么?
算法的整个过程是,顾名思义,根据最长的未使用算法消除了数据。
核心想法“如果最近访问了数据,将来访问的机会将会更高。”
我们将所有数据组织到链接列表中:
编辑
LRU算法
可以发现,LRU更新和插入新数据发生在链接列表中,并且删除数据发生在链接列表的末尾。
对可访问数据的访问将移至MRU端,并且在访问数据之前的数据将相应地回到一点点。
苍凉
可以使用单个链接列表吗?
如果您选择一个链接列表并删除此节点,则需要O(n)一次穿越前驱动节点。
苍凉
REDIS是否使用LRU算法来管理所有缓存数据?
不,因为LRU算法需要使用链接列表来管理所有数据,因此它将导致大量额外的空间消耗。
此外,访问大量节点以带来频繁的链接链接节点运动操作,从而降低了重新性能。
因此,Redis简化了算法。Redis LRU算法不是真正的LRU。重新示例少量键,并消除示例数据中尚未访问的数据中最长的密钥。
这意味着REDIS无法消除对数据库的最长访问。
REDIS LRU算法具有重要的观点,即它可以更改样品数量以调整算法的准确性,以使其接近真实的LRU算法,同时避免记忆的消耗,因为只有少量的样品需要采样。每次,并非所有数据。
配置如下:
运行
您是否记得数据结构中有一个字段t可以记录最近访问的每个数据的时间戳。
当Redis消除数据时,第一个随机选择的n个数据将其放在候选集合上,以消除最小的LRU场值的数据。
当需要再次数据时,数据将被重新选择为第一个创建的候选候选集合,但是有一个选择标准:输入数据的LRU的值必须小于候选集合中最小的LRU值。
如果输入候选人集合的新数据数量达到设定值,则消除了候选收集中最小的数据。
这样,链接列表节点的数量大大减少了,同时,链接列表节点不需要同时访问数据,从而大大提高了性能。
LinkedHashmap实现
通过实施Java,可以通过组合或继承方法实施。
重点是将该构造函数设置为True的第三个构造函数,该构造函数代表内部访问顺序。
此外,它需要重写。如果此功能返回,则意味着已删除了未访问的最长节点以实现消除数据。
意识到
该代码从左代码146中删除。LRU缓存。代码中有注释。
原始:https://juejin.cn/post/7101106558859214844