Redis高階 LRU演算法

2021-10-04 10:15:26 字數 722 閱讀 8728

首先,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 如果金鑰不存在,則寫入其資料值。當快取容...