lru(least recently used,最近最少使用)演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是「如果資料最近被訪問過,那麼將來被訪問的機率也更高」。
最常見的實現是使用乙個鍊錶儲存快取資料,詳細演算法實現如下:
新資料插入到鍊錶頭部;
每當快取命中(即快取資料被訪問),則將資料移到鍊錶頭部;
當鍊表滿的時候,將鍊錶尾部的資料丟棄。
function
node
(value, next)
function
lrucache
(initialcapacity, initialvalue)
} //是否為空
lrucache.prototype.isempty = function
() ;
//在頭部做新增
lrucache.prototype.addfirst = function
(obj) else
this.size++;
newnode = null;
};
//在尾部做刪除
lrucache.prototype.removelast = function
()
this.size--;
} };
//將節點向頭部移動
lrucache.prototype.moveforward = function
(key)
};
//快取元素
lrucache.prototype.cache = function
(key, value) else ;
obj[key] = value;
this.addfirst(obj);
var that = this;
object.defineproperty(this, key, ,
get : function
() ,
configurable : true,
enumerable : true
});
//超出容量的話,將最少使用的刪除
if (this.size > this.capacity)
} //可以鏈式呼叫
return
this;
};
//刪除元素
lrucache.prototype.del = function
(key)
previous = cur;
} if (previous)
} else
} if (this.hasownproperty(key)) else
};
//查詢元素
參考:
Lru快取的簡單實現
最近最少使用演算法設計的map快取 使用linkedhashmap特性,完成當快取超過指定容量時,擠掉最久未使用的資源。具體編寫的工具類如下 一 cache類 繼承linkedhashmap 用於儲存資料 class cache extends linkedhashmap 取得元素耗費儲存空間大小 ...
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中,訪問完成後,我們在鍊錶中將該鍵刪除,然後將其新增到鍊錶的首部,表示最近剛訪問過這個鍵,當快取滿了後,如果要新增...