redis過期策略與記憶體淘汰機制分析
阿新 • • 發佈:2019-08-04
過期策略:
我們在set key時,可以給一個expire time,就是過期時間
這段過期時間以後,redis對key刪除使用:定期刪除+惰性刪除
定期刪除指redis預設在100ms內隨機抽取一些設定了過期時間的key,檢查是否過期,過期就刪除。
定期刪除因為隨機的,很多key沒有刪除,就用到惰性刪除
惰性刪除是在查詢某個key時,redis檢查下這個key是否過期,過期就刪除。
但是如果定期刪除漏掉很多過期key,也沒進行查詢,不能惰性刪除,造成很多過期key堆積記憶體中,導致記憶體耗盡,這時使用記憶體淘汰機制。
記憶體淘汰機制:
一般使用allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間內移除最少使用的key
LRU回收演算法:
使用雜湊連結串列。雜湊表由若干個key-value組成,邏輯上這些key,value是無序的。在雜湊連結串列中,每個key-value都有他的前驅key-value、後驅key-value,像雙向連結串列中的節點。這樣雜湊連結串列就有序。
將雜湊列表中的key-value按照時間排序。
每次訪問新的key,將其key-value插入到連結串列最右端。
當記憶體不足時,將最左端key-value刪除。