国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一文帶你了解什么是 LRU 算法?

開發 前端
LRU (Least recently used:最近最少使用)算法在緩存寫滿的時候,會根據所有數據的訪問記錄,淘汰掉未來被訪問幾率最低的數據。也就是說該算法認為,最近被訪問過的數據,在將來被訪問的幾率最大。

緩存 是我們寫代碼過程中常用的一種手段,是一種空間換時間的做法。就拿我們經常使用的 HTTP 協議,其中也存在強緩存和協商緩存兩種緩存方式。當我們打開一個網站的時候,瀏覽器會查詢該請求的響應頭,通過判斷響應頭中是否有 Cache-Control、Last-Modified、ETag 等字段,來確定是否直接使用之前下載的資源緩存,而不是重新從服務器進行下載。

下面就是當我們訪問百度時,某些資源命中了協商緩存,服務端返回 304 狀態碼,還有一部分資源命中了強緩存,直接讀取了本地緩存。

但是,緩存并不是無限制的,會有大小的限制。無論是我們的 cookie(不同瀏覽器有所區別,一般在 4KB 左右),還是 localStorage(和 cookie 一樣,不同瀏覽器有所區別,有些瀏覽器為 5MB,有些瀏覽器為 10MB),都會有大小限制。

這個時候就需要涉及到一種算法,需要將超出大小限制的緩存進行淘汰,一般的規則是淘汰掉最近沒有被訪問到的緩存,也就是今天要介紹的主角:LRU (Least recently used:最近最少使用)。當然除了 LRU,常見的緩存淘汰還有 FIFO(first-in, first-out:先進先出) 和 LFU(Least frequently used:最少使用)。

什么是 LRU?

LRU (Least recently used:最近最少使用)算法在緩存寫滿的時候,會根據所有數據的訪問記錄,淘汰掉未來被訪問幾率最低的數據。也就是說該算法認為,最近被訪問過的數據,在將來被訪問的幾率最大。

為了方便理解 LRU 算法的全流程,畫了一個簡單的圖:

  1. 假設我們有一塊內存,一共能夠存儲 5 數據塊。
  2. 依次向內存存入A、B、C、D、E,此時內存已經存滿。
  3. 再次插入新的數據時,會將在內存存放時間最久的數據A淘汰掉。
  4. 當我們在外部再次讀取數據B時,已經處于末尾的B會被標記為活躍狀態,提到頭部,數據C就變成了存放時間最久的數據。
  5. 再次插入新的數據G,存放時間最久的數據C就會被淘汰掉。

算法實現

下面通過一段簡單的代碼來實現這個邏輯。

class LRUCache {
list = [] // 用于標記先后順序
cache = {} // 用于緩存所有數據
capacity = 0 // 緩存的最大容量
constructor (capacity) {
// 存儲 LRU 可緩存的最大容量
this.capacity = capacity
}
}

基本的結構如上所示,LRU需要實現的就是兩個方法:get 和 put。

class LRUCache {
// 獲取數據
get (key) { }
// 存儲數據
put (key, value) { }
}

我們現在看看如何進行數據的存儲:

class LRUCache {
// 存儲數據
put (key, value) {
// 存儲之前需要先判斷長度是否達到上限
if (this.list.length >= this.capacity) {
// 由于每次存儲后,都會將 key 放入 list 最后,
// 所以,需要取出第一個 key,并刪除cache中的數據。
const latest = this.list.shift()
delete this.cache[latest]
}
// 寫入緩存
this.cache[key] = value
// 寫入緩存后,需要將 key 放入 list 的最后
this.list.push(key)
}
}

然后,在每次獲取數據時,都需要更新 list,將當前獲取的 key 放到 list 的最后。

class LRUCache {
// 獲取數據
get (key) {
if (this.cache[key] !== undefined) {
// 如果 key 對應的緩存存在
// 在返回緩存之前,需要重新激活 key
this.active(key)
return this.cache[key]
}
return undefined
}
// 重新激活key,將指定 key 移動到 list 最后
active (key) {
// 先將 keylist 中刪除
const idx = this.list.indexOf(key)
if (idx !== -1) {
this.list.splice(idx, 1)
}
// 然后將 key 放到 list 最后面
this.list.push(key)
}
}

這個時候,其實還沒有完全實現,因為除了 get 操作,put 操作也需要將對應的 key 重新激活。

class LRUCache {
// 存儲數據
put (key, value) {
if (this.cache[key]) {
// 如果該 key 之前存在,將 key 重新激活
this.active(key)
this.cache[key] = value
// 而且此時緩存的長度不會發生變化
// 所以不需要進行后續的長度判斷,可以直接返回
return
}

// 存儲之前需要先判斷長度是否達到上限
if (this.list.length >= this.capacity) {
// 由于每次存儲后,都會將 key 放入 list 最后,
// 所以,需要取出第一個 key,并刪除cache中的數據。
const latest = this.list.shift()
delete this.cache[latest]
}
// 寫入緩存
this.cache[key] = value
// 寫入緩存后,需要將 key 放入 list 的最后
this.list.push(key)
}
}

可能會有人覺得這種算法在前端沒有什么應用場景,說起來,在 Vue 的內置組件 keep-alive 中就使用到了 LRU 算法。

后續應該還會繼續介紹一下 LFU 算法,敬請期待。

責任編輯:姜華 來源: 自然醒的筆記本
相關推薦

2025-01-15 09:06:57

servlet服務器Java

2022-09-29 13:09:38

DataClassPython代碼

2022-09-06 11:21:49

光網絡光纖

2019-07-04 15:16:52

數據挖掘大數據算法

2023-05-17 11:33:45

梯度下降機器學習

2019-04-19 14:03:52

APISDK接口

2023-04-11 08:01:32

Web 開發源代碼映射

2023-11-20 08:18:49

Netty服務器

2018-10-22 08:14:04

2022-11-11 19:09:13

架構

2023-11-06 08:16:19

APM系統運維

2019-11-14 09:16:56

物聯網技術路由器

2024-05-27 00:00:00

.NET游戲引擎C#

2023-11-08 08:15:48

服務監控Zipkin

2022-02-24 07:34:10

SSL協議加密

2023-10-27 08:15:45

2020-02-02 15:14:24

HTTP黑科技前端

2020-10-08 14:32:57

大數據工具技術

2022-04-28 09:22:46

Vue灰度發布代碼

2025-09-12 16:31:04

TiDBMCP ServerAI工具
點贊
收藏

51CTO技術棧公眾號

日韩网站免费观看高清| 亚洲国产精品大全| 精品欧美久久久| 日韩三级免费| 欧美午夜精品一区二区三区| 国产精品女人久久久久久| 日韩国产福利| 国产电影一区在线| 久久亚洲精品网站| 瑟瑟在线观看| 国产剧情一区在线| 自拍偷拍亚洲在线| 国产男女无遮挡| 手机在线一区二区三区| 欧美一级在线观看| 国产小黄视频| 日韩精彩视频在线观看| 一区二区在线视频| 成年网站在线| 国产精品免费人成网站| 激情久久av| av毛片在线| 国产精品高潮久久久久无| 国产精品网红福利| 久久久久久久激情| 中文在线аv在线| 一区二区三区日韩精品视频| 亚洲综合首页| 国产精品日本| 国产精品欧美日韩久久| 欧美色网一区| 色偷偷亚洲男人天堂| 高清在线一区| 日本 片 成人 在线| 荡女精品导航| 欧美亚洲午夜视频在线观看| 黄色亚洲大片免费在线观看| 最新av在线免费观看| 综合激情成人伊人| 岛国av在线网站| 久久影院一区二区三区| 99在线视频精品| 欧美日韩在线一| 奇米精品一区二区三区在线观看一| 国产精品一区视频| 国产精品激情| 国产成人精品综合| 日本妇女一区| 青草青草久热精品视频在线网站| 日本午夜精品久久久| 正在播放亚洲一区| 久久综合之合合综合久久| 97久久精品人人做人人爽50路| 宅男噜噜99国产精品观看免费| 久久久精品五月天| 亚洲精品一区二区三区av| 美腿丝袜亚洲三区| 国产精品va在线观看无码| 91在线云播放| 黄色国产网站| 在线观看视频一区二区| 色yeye免费人成网站在线观看| 日韩精品中文字幕在线播放| 91精品国产66| 国产69精品久久久| 欧美亚洲激情| 国新精品乱码一区二区三区18| 久久男女视频| 岛国大片在线播放| 亚洲欧洲精品天堂一级| 美女一区二区三区| 国产999精品久久久影片官网| 日韩欧美国产精品综合嫩v| 91在线观看免费观看 | 国产成人精品福利| 国产精品91一区| 午夜欧美视频| 欧美日韩一级在线| 国产精品亲子伦对白| 视频在线观看你懂的| 日韩欧美在线影院| 欧美久久亚洲| 国产精品国产三级国产专区53 | 精品视频在线观看免费观看 | 国产精品一区二区三区免费观看| 久久aⅴ乱码一区二区三区| av日韩在线看| 亚洲免费观看高清在线观看| 免费黄色在线视频网站| 日韩高清a**址| 亚洲三级网页| 亚洲v国产v在线观看| 欧美国产日韩a欧美在线观看| 国产免费av高清在线| 中文字幕精品在线| 欧美国产偷国产精品三区| 伊人久久青草| 亚洲福利电影网| 中文字幕乱码在线播放| 欧美在线播放视频| 久久久久看片| 电影天堂最新网址| 欧美一级二级三级蜜桃| 91精品导航| 日韩欧美视频第二区| 亚洲欧洲日产国码二区| 都市激情久久综合| 国产精品人成电影| 床上的激情91.| h网站在线免费观看| 欧美国产亚洲精品久久久8v| 亚洲综合激情| 香港日本韩国三级| 中文字幕在线看视频国产欧美在线看完整 | jizz一区二区三区| 国产成人精品电影久久久| 免费亚洲网站| 95影院理论片在线观看| 一区二区三区黄色| 国产欧美日韩一区二区三区在线| 一本色道久久亚洲综合精品蜜桃| 欧美一级欧美三级在线观看 | 欧美电影精品一区二区| 欧美日韩亚洲在线观看| 国产精品无码av在线播放| 欧美久久久影院| 亚洲日产av中文字幕| 人妻夜夜添夜夜无码av| 色综合中文字幕国产| 国产美女撒尿一区二区| 国产精品一色哟哟| 日韩欧美一区中文| 国产二区精品| 九七伦理97伦理| 久久成年人免费电影| 日本va欧美va精品发布| 国产女人在线视频| 国产精品一区二区3区| 国产亚洲一二三区| 久久69成人| 好色先生视频污| 精品少妇一区二区三区视频免付费| 日韩一级毛片| eeuss鲁片一区| 欧美日韩ab片| 2024国产精品| 粉嫩91精品久久久久久久99蜜桃| 婷婷精品国产一区二区三区日韩| 91高清视频在线| 欧美午夜精品| 高清国产福利在线观看| 99久热re在线精品996热视频| 午夜婷婷国产麻豆精品| 成人高清av| 性欧美精品孕妇| 亚洲xxxxx电影| 五月天一区二区三区| 欧美丝袜丝交足nylons172| 橘梨纱av一区二区三区在线观看| 欧美精品久久久久久久久久| 久久久久久久精| 亚洲一区二区三区日本久久九| avav在线看| 欧美精品第一页在线播放| 国产亚洲短视频| 九九热播视频在线精品6| 四虎免费av| 国产精品亚洲第一区| 日韩欧美亚洲范冰冰与中字| 国产精品chinese| 黄色网页在线观看| 尤物国产精品| 中文字幕在线精品| 国产精品五月天| 清纯唯美日韩| 国际av在线| 涩涩涩999| 一区二区三区四区视频| www欧美成人18+| 一区二区美女| 国产视频三级在线观看播放| 欧美日韩在线一二三| 日韩精品在线免费播放| 91网上在线视频| 伊甸园亚洲一区| 国产毛片av在线| 亚洲一区不卡在线| 久久精品国产一区二区三区| 国产精品麻豆欧美日韩ww| 日本久久一二三四| 成a人片在线观看| 免费观看美女裸体网站| 日韩av手机在线观看| 色播五月激情综合网| 日韩电影免费一区| 999色成人| 绯色av一区| 翔田千里亚洲一二三区| 免费97视频在线精品国自产拍| 亚洲一区二区三区小说|