過期策略: 我們在set key時,可以給一個expire time,就是過期時間 這段過期時間以後,redis對key刪除使用:定期刪除+惰性刪除 定期刪除指redis預設在100ms內隨機抽取一些設置了過期時間的key,檢查是否過期,過期就刪除。 定期刪除因為隨機的,很多key沒有刪除,就用到惰 ...
過期策略:
我們在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刪除。