redis使用的是近似lru演算法,它跟常規的lru演算法還不太一樣。近似lru演算法通過隨機取樣法淘汰資料,每次隨機出5(預設)個key,從裡面淘汰掉最近最少使用的key。
redis給每個key增加了乙個額外增加了乙個24bit的字段,用來儲存該key最後一次被訪問的時間。
# 取樣數量
maxmemory-samples 10
新演算法會維護乙個候選池(大小為16),池中的資料根據訪問時間進行排序。
第一次隨機選取的key都會放入池中,隨後每次隨機選取的key只有在訪問時間小於池中最小的時間才會放入池中,直到候選池被放滿。
當放滿後,如果有新的key需要放入,則將池中最後訪問時間最大(最近被訪問)的移除。
當需要淘汰的時候,則直接從池中選取最近訪問時間最小(最久沒被訪問)的key淘汰掉就行。
redis中LRU演算法的實現
lru least recently used 即最近最少使用 它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。當快取容...
LRU在MySQL快取池的實現
mysql的innodb引擎設定有索引及資料快取池,其中用到的lru演算法來維持快取的命中率 這裡用到了順序表list來作為緩衝池,每個資料節點稱為block 該演算法採用 中點插入法 當插入乙個新block時,移除表尾最近最少使用的block,在中點插入新block。這個中點將鍊錶分為兩部分 1....
Lru演算法在Android中的應用
對於lru演算法的理解 lru演算法,將命中率不高的空間釋放掉,保留命中率較高的空間。這種演算法有一種實現方式 建立的物件通過佇列儲存起來,如果對乙個物件進行了訪問,就將這個物件放到佇列的開頭,新加入的物件也會放在佇列的開頭 也就是說,佇列開頭一定是新加入的或者是常用的物件 當佇列長度超過了限額時,...