什麼是LRU緩存淘汰機制

LRU是Least Recently Used的縮寫,即最近最少使用,是一種經常使用的頁面置換算法,選擇最近最久未使用的頁面予以淘汰。該算法賦予每一個頁面一個訪問字段,用來記錄一個頁面自上次被訪問以來所經歷的時間 t,當須淘汰一個頁面時,選擇現有頁面中其 t 值最大的,即最近最少使用的頁面予以淘汰。html

LRU正如咱們平常生活時使用手機那樣子:咱們會打開多個應用,在後臺應用管理能夠看到你打開的應用列表,最近的開的排的靠前,比較舊的沒用就靠的比較後了。但是,要知道,咱們的手機內存是有限的,若是開太多應用,把內存都佔滿,那麼手機就特別卡了。因此,在這時候,手機會自動清理內存,過程以下:會將最久未使用的應用程序進程中止(斷定爲無用的數據),就是按照時間來,而後停掉倒數第二久未使用的應用......以此類推,直到有足夠空間才中止清理。若是你又去訪問未中止的應用,那麼他就跳到了咱們後臺應用列表的第一個了。算法

LRU算法就是這樣的,將最久、最少使用的數據進行淘汰。緩存


若是叫咱們設計一個LRU算法如何設計呢?spa

  • 要接受一個最大的緩存容量 capacity設計

  • 實現兩個方法:code

    • get(int key):獲取key對應的val
    • put(int key, int value):存入新的鍵值對,若是存在的話就更新val
    • 注意:無論是訪問,仍是添加 已存在 / 不存在 鍵值對,那麼就說明訪問了該數據
  • 使用雙向鏈表和哈希表的結合實現LRU算法: 哈希表的查找速度快,可是是無序的; 而鏈表是有序的, 可是查找速度慢, 爲\(O(N)\), 因此咱們能夠利用這兩個特性,結合起來,造成了哈希鏈表, 這樣的話,get和put都是\(O(1)\)的時間複雜度了, 圖解以下:htm

這對應力扣上面的142題以及個人題解,你們能夠去練習一下,相信你寫過一遍就會明白其中原理了...blog

相關文章
相關標籤/搜索