0
点赞
收藏
分享

微信扫一扫

数据结构:缓存淘汰策略

color_小浣熊 2022-04-01 阅读 38

三 种 缓 存 淘 汰 策 略 \color{#FF0000}{三种缓存淘汰策略}

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


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


单 链 表 实 现 L R U \color{#FF0000}{单链表实现LRU} LRU
(1)当访问的数据 - 没有存在 - 于存储缓存的链表中时:将数据插入链表表头,时间复杂度为 O(1);
(2)当访问的数据 - 存在于 - 存储缓存的链表中时:将该数据对应的节点,插入到链表表头,时间复杂度为 O(n)。

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


数 组 实 现 L R U \color{#FF0000}{数组实现LRU} LRU

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

第二种:数组末尾存放最新访问的数据,缓存满,最先清理数组首位
(1)最新访问的数据 - 未存在 - 于缓存数组中时:将数据插入到数组末尾,时间复杂度为 O(1)
(2)最新访问的数据 - 存在 - 于缓存数组中时:将该数据移动至数组末尾,其他数据根据情况依次向前移动,时间复杂度为O(n)
缓存数组满时,清理数组首位置的元素,剩余元素根据需要依次向前移动。

补充代码等待!!!

(看文章整理的,侵删哦,感谢)

举报

相关推荐

0 条评论