Python實現LRU快取模擬

2021-08-15 22:42:23 字數 1363 閱讀 7680

lru

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

實現原理

利用list記錄key的次序,每次set,或get操作將key插入到list首位。

緩衝區滿之後再出現set操作,移除末尾的key。

使用python3 ,key in dict判斷key是否出現過,python2中應該為has_key

class

lrucache:

def__init__

(self, size=3):

self.cache = {}

self.keys =

self.size = size

defget(self, key):

if key in self.cache:

self.keys.remove(key)

self.keys.insert(0, key)

return self.cache[key]

else:

return

none

defset

(self, key, value):

if key in self.cache:

self.keys.remove(key)

self.keys.insert(0, key)

self.cache[key] = value

elif len(self.keys) == self.size:

old = self.keys.pop()

self.cache.pop(old)

self.keys.insert(0, key)

self.cache[key] = value

else:

self.keys.insert(0, key)

self.cache[key] = value

if __name__ == '__main__':

test = lrucache()

test.set('a',2)

test.set('b',2)

test.set('c',2)

test.set('d',2)

test.set('e',2)

test.set('f',2)

print(test.get('c'))

print(test.get('b'))

print(test.get('a'))

預期輸出為

none

none

none

python實現LRU快取淘汰

lru least recent used 最近最少使用演算法,主要用於快取淘汰.主要目的就是把最近最少使用的資料移除記憶體,以載入其他資料 原理 有新資料 意味著資料之前沒有被快取過 時,加入到列表頭 快取達到最大容量時,需要淘汰資料多出來的資料,此時淘汰列表尾部的資料 當快取中有資料被命中,則將...

LRU快取機制實現

題目描述 設計lru快取結構,該結構在構造時確定大小,假設大小為k,並有如下兩個功能 set key,value 將記錄 key,value 插入該結構 get key 返回key對應的value值 要求 set和get方法的時間複雜度為o 1 某個key的set或get操作一旦發生,認為這個key...

快取 LRU演算法實現

以下是基於雙向鍊錶 hashmap的lru演算法實現,對演算法的解釋如下 設定乙個map存放對應的鍵和值,同時設定乙個雙向鍊錶,來儲存最近最久未使用的關係,如果訪問乙個鍵,鍵存在於map中,訪問完成後,我們在鍊錶中將該鍵刪除,然後將其新增到鍊錶的首部,表示最近剛訪問過這個鍵,當快取滿了後,如果要新增...