Redis的LRU快取淘汰演算法實現

2025-05-28 14:50:08 字數 1121 閱讀 7326

lru 快取淘汰演算法

1樓:張三**

當要快取某個資料的時候,先在連結串列中查詢這個資料。如果沒有找到,則直接將資料放到連結串列的尾部;如果找到了,我們就把它移動到連結串列的尾部,然後淘汰頭部資料。

因為查詢資料需要遍歷連結串列,所以單純用連結串列實現的 lru 快取淘汰演算法的時間複雜很高,是 o(n)。如果我們將雜湊表和雙向連結串列兩種數喚伏據結構組合使用,可以將這三個操作的時間複雜度都降低到 o(1)。

因為我們的雜湊表是通過連結串列法解決雜湊衝突的,所以每個結點會在兩條鏈中。乙個鏈是剛剛我們提到的雙向連結串列,另乙個鏈是雜湊表中的拉鍊。前驅和後繼指標是為了將結點串在雙向連結串列中,hnext 指標是為了將結點串在散旦鏈猛列表的拉鍊中。

這整個過程涉及的查詢操作都可以通過雜湊表來完成。其他的操作,比如刪除頭結點、連結串列尾部插入資料等,通過雙向連結串列都可以在 o(1) 的時間複雜度內完成。所以,這三個操作的時間複雜度都是 o(1)。

至此,我們就通過雜湊表和雙向連結串列的組合使用,實現了乙個高效的、支援 lru 快取淘汰演算法的快取系統原型。

雜湊表中資料是經過雜湊函式打亂之後無規律儲存的,但是 linkedhashmap可以 做到按照資料的插入順序來儲存。

每次呼叫 put() 函式,往 linkedhashmap 中新增資料的時候,都會將資料新增到連結串列的尾部,再次將鍵值為 3 的資料放入到 linkedhashmap 的時候,會先查詢這個鍵值是否已經有了,然後,再將已經存在的 (3,11) 刪除,並且將新的 (3,26) 放到連結串列的尾部,訪問到 key 為 5 的資料的時候,我們將被訪問到的資料移動到連結串列的尾部。

所以按照訪問時間排序的 linkedhashmap 本身就是乙個支援 lru 快取淘汰策略的快取系統。

雜湊表這種資料結構雖然支援非常高效的資料插入、刪除、查詢操作,但是雜湊表中的資料都是通過雜湊函式打亂之後無規律儲存的。也就說,它無法支援按照某種順序快速地遍歷資料。如果希望按照順序遍歷雜湊表中的資料,那我們需要將雜湊表中的資料拷貝到陣列中,然後排序,再遍歷。

因為雜湊表是動態資料結構,不停地有資料的插入、刪除,所以每當我們希望按順序遍歷雜湊表中的資料的時候,都需要先排序,那效率勢必會很低。為了解決這個問題,我模橋們將雜湊表和連結串列(或者跳錶)結合在一起使用。

硬碟快取是不是越大越好,硬碟的快取容量越大越好嗎

區別不小,主要體現在傳輸速度及對硬碟的保護效果上。16m的快取可以加快檔案傳輸速度,大檔案的傳輸尤其明顯,另外快取大可以有效緩解對硬碟本身的讀寫頻率,可以使硬碟的壽命變得更長。不過硬碟這東西不僅僅要看快取,其他的技術比如ncq阿,垂直讀寫技術阿都很重要。快取越大 1 速度越快。2 減少機械的重複讀寫...

淘小鋪是阿里巴巴淘小鋪的嗎,阿里巴巴集團淘小鋪是什麼?淘小鋪怎麼做

淘小鋪是阿里巴巴旗下 衍生出來的一種新零售模式,自己開店,自己買也可以分享平臺所有商品,說簡單一點就是開了一家超市,只是進貨不需要錢。淘小鋪正規 安全 可靠。看到官方說是有兩種模式的,應該是前期為了好推廣吧,團隊模式掏錢買禮包也可以理解吧,主要是產品還行,看產品資質過硬還有保險承包,就這一點都可以了...

關於洋淘的成語?洋淘買家秀怎麼設定?

洋洋灑灑,洋洋大觀,望洋興嘆,沙裡淘金。洋淘買家秀怎樣設定呢?首先進入洋淘秀設定後臺.洋淘秀後臺入口 千牛賣家中心 使用者運營 洋淘買家秀 天貓商家 天貓商家中心 營銷中心 自運營中心 使用者 洋淘買家秀.買家秀內容管理選擇想要重點運營的寶貝素材進行管理,進行加精管理,單個寶貝加精 條,在寶貝詳情頁會透...