首先,redis的過期策略分為定期刪除+惰性刪除。
定期刪除:預設100ms隨機抽查一些過期的key將其刪除即可。
惰性刪除:當查詢key時, if (key 過期)? 刪除key且不返回 :正常執行;
為什麼不掃瞄全部的key?
如果對所有的key進行掃瞄,那就相當於執行了一次全包掃瞄,效能是非常低的。
noevivtion:記憶體不足以容納新寫入的資料時,直接報錯。
allkeys-lru:記憶體不足以容納新寫入的資料時,移除所有key中最少使用的key。
volatile-lru:記憶體不足以容納新寫入的資料時,移除過期key中最少使用的key。
allkeys-random:記憶體不足以容納新寫入的資料時,移除所有key中隨機的key。
volatile-random:記憶體不足以容納新寫入的資料時,移除過期key中隨機的key。
volatile-ttl:記憶體不足以容納新寫入的資料時,移除過期key中更早過期的key。
linkedhashmap實現了lru演算法,繼承即可做乙個簡單的實現
class lrucacheextends linkedhashmap
@override
protected boolean removeeldestentry(map.entryeldest)
}
設定Redis使用LRU演算法
127.0 0.1 6379 config get maxmemory 1 maxmemory 2 0 127.0 0.1 6379 config set maxmemory 100mb ok127.0 0.1 6379 config get maxmemory 1 maxmemory 2 1048...
設定Redis使用LRU演算法
lru least recently used 最近最少使用演算法是眾多置換演算法中的一種。redis中有乙個maxmemory概念,主要是為了將使用的記憶體限定在乙個固定的大小。redis用到的lru 演算法,是一種近似的lru演算法。上面已經說過maxmemory是為了限定redis最大記憶體使...
redis中LRU演算法的實現
lru least recently used 即最近最少使用 它應該支援以下操作 獲取資料 get 和 寫入資料 put 獲取資料 get key 如果金鑰 key 存在於快取中,則獲取金鑰的值 總是正數 否則返回 1。寫入資料 put key,value 如果金鑰不存在,則寫入其資料值。當快取容...