快取淘汰演算法 LRU演算法

2022-09-06 10:48:20 字數 1126 閱讀 9625

乙個用hash表作為底層結構的資料庫,當然少不了快取淘汰演算法。

lru(least recently used,最近最少使用)演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是「如果資料最近被訪問過,那麼將來被訪問的機率也更高」。

新資料插入到鍊錶頭部;

每當快取命中(即快取資料被訪問),則將資料移到鍊錶頭部;

當鍊表滿的時候,將鍊錶尾部的資料丟棄。

過程如下:

最開始時,記憶體空間是空的,因此依次進入a、b、c是沒有問題的

當加入d時,就出現了問題,記憶體空間不夠了,因此根據lru演算法,記憶體空間中a待的時間最為久遠,選擇a,將其淘汰

當再次引用b時,記憶體空間中的b又處於活躍狀態,而c則變成了記憶體空間中,近段時間最久未使用的

當再次向記憶體空間加入e時,這時記憶體空間又不足了,選擇在記憶體空間中待的最久的c將其淘汰出記憶體,這時的記憶體空間存放的物件就是e->b->d

附上:golang演算法

package lru

import "container/list"

type lrucache struct

type pair struct

func constructor(capacity int) lrucache

}func (this *lrucache) get(key int) int

return -1

}func (this *lrucache) put(key int, value int)

} else

this.list.pushfront(pair)

this.cache[key] = this.list.front() }}

lru其實還可以再優化,用過redis的都知道可以過期時間,在lrucache資料結構裡面設定ttl過期時間也是可以的,詳細的自己慢慢實現吧。

go手碼的ci/cd部署系統,

,star一下唄。

快取淘汰演算法 LRU演算法

lru least recently used,最近最少使用 演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是 如果資料最近被訪問過,那麼將來被訪問的機率也更高 最常見的實現是使用乙個鍊錶儲存快取資料,詳細演算法實現如下 新資料插入到鍊錶頭部 每當快取命中 即快取資料被訪問 則將資料移到鍊錶...

LRU演算法 快取淘汰演算法

lru least recently used,最近最少使用 演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是 如果資料最近被訪問過,那麼將來被訪問的機率也很高 反過來說 如果資料最近這段時間一直都沒有訪問,那麼將來被訪問的概率也會很低 兩種理解是一樣的 常用於頁面置換演算法,是為虛擬頁式儲...

快取淘汰演算法 LRU

1.lru 1.1.原理 lru least recently used,最近最少使用 演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是 如果資料最近被訪問過,那麼將來被訪問的機率也更高 1.2.實現 最常見的實現是使用乙個鍊錶儲存快取資料,詳細演算法實現如下 1.新資料插入到鍊錶頭部 2....