数据结构:缓存淘汰策略

Posted 小公子”

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:缓存淘汰策略相关的知识,希望对你有一定的参考价值。

文章目录

三种缓存淘汰策略

1.FIFO - First In First Out - 先进先出
2.LFU - Least Frequently Used - 最少 - 使用
3.LRU - Least Recently Used - 最近 - 最少 - 使用


其中LRU使用最广,下面介绍 使用 链表 和 数组 来实现LRU


单链表实现LRU

(1)当访问的数据 - 没有存在 - 于存储缓存的链表中时:
i- 如果缓存链表没满:将数据插入链表表头,时间复杂度为 O(1);
ii - 如果缓存链表满了:删除链表的末位,将新数据添加到 缓存链表 的表头,时间复杂度为 O(1)。

(2)当访问的数据 - 存在于 - 存储缓存的链表中时:
将该数据对应的节点,调整到链表表头,时间复杂度为 O(1)。

缓存链表满,从链表尾部开始清理。


数组实现LRU

第一种:数组首位置存放最新访问的数据,缓存满,最先清理数组末尾
(1)最新访问的数据 - 未存在 - 于缓存数组中时:
i - 缓存数组未满:将数据插入到数组首位,数组内的其他数据依次向后移动一位。时间复杂度为 O(n)
ii - 缓存数组满:清理 数组 末尾,再存入新的。

(2)最新访问的数据 - 存在 - 于缓存数组中时:将该数据移动至数组首位,其他数据依次向后移动。时间复杂度为O(n)

缓存数组满时,首先清理数组末尾的数据。

第二种:数组末尾存放最新访问的数据,缓存满,最先清理数组首位
(1)最新访问的数据 - 未存在 - 于缓存数组中时:将数据插入到数组末尾,时间复杂度为 O(n)

(2)最新访问的数据 - 存在 - 于缓存数组中时:将该数据移动至数组末尾,其他数据根据情况依次向前移动,时间复杂度为O(n)

缓存数组满时,清理数组首位置的元素,剩余元素根据需要依次向前移动。

补充代码等待!!!

(看文章整理的,如有错误,欢迎指正,感谢。)
侵删

以上是关于数据结构:缓存淘汰策略的主要内容,如果未能解决你的问题,请参考以下文章

面试题LRU算法及编码实现LRU策略缓存

LRU 缓存淘汰算法

缓存淘汰策略

缓存淘汰策略之LRU

MySQL: 18 优化后的LRU链表中尾部的缓存页淘汰刷入磁盘的机制

数据结构:缓存淘汰策略