運用你所掌握的資料結構,設計和實現乙個 lru (最近最少使用) 快取機制。它應該支援以下操作: 獲取資料 get 和 寫入資料 put 。獲取資料 get(key) - 如果金鑰 (key) 存在於快取中,則獲取金鑰的值(總是正數),否則返回 -1。寫入資料 put(key, value) - 如果金鑰不存在,則寫入其資料值。當快取容量達到上限時,它應該在寫入新資料之前刪除最近最少使用的資料值,從而為新的資料值留出空間。
lrucache cache = new lrucache( 2 /* 快取容量 */ );cache.put(1, 1);
cache.put(2, 2);
cache.get(1); // 返回 1
cache.put(3, 3); // 該操作會使得金鑰 2 作廢
cache.get(2); // 返回 -1 (未找到)
cache.put(4, 4); // 該操作會使得金鑰 1 作廢
cache.get(1); // 返回 -1 (未找到)
cache.get(3); // 返回 3
cache.get(4); // 返回 4
分析:採用雙鏈表的方式,每次查詢,自動擦除快取,重新插入資料,保證最後乙個一定是不經常訪問的
class
lrucache
intget
(int key)
pair<
int,
int> kv =
*map[key]
; cache.
erase
(map[key]);
cache.
push_front
(kv)
; map[key]
= cache.
begin()
;return kv.second;
}void
put(
int key,
int value)
cache.
push_front
(pair<
int,
int>
(key, value));
map[key]
= cache.
begin()
;}else
}private
:int cap;
listint,
int>> cache;
unordered_map<
int, listint,
int>>
::iterator> map;
//key對映到cache中
};
IOS 開發快取機制 記憶體快取機制
使用快取的目的是為了使用的應用程式能更快速的響應使用者輸入,是程式高效的執行。有時候我們需要將遠端 web伺服器獲取的資料快取起來,減少對同乙個 url多次請求。記憶體快取我們可以使用 sdk中的 nsurlcache類。nsurlrequest需要乙個快取引數來說明它請求的 url何如快取資料的,...
快取機制 全棧快取
1.配置檔案 cache middleware seconds 20 設定超時時間20秒 第一行和最後一行,位置不能放錯,只能放第一,和最後一行,又報錯是 modulenotfounderror no module named django.middleware.cache.updatecachem...
研究快取機制
asp.netforums中使用了兩級快取來處理乙個使用者在不同版面上的許可權,第一級使用httpruntime.cache,可是使用者在不同的請求中從執行時提供的快取機制中提高效率,第二級是httpcontext.current,它是建立在第一級快取之上,用於使用者在同乙個請求期間的快取,這個快取...