1. 程式人生 > >redis過期策略與記憶體淘汰機制分析

redis過期策略與記憶體淘汰機制分析

過期策略:

  我們在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刪除。