Redis的快取淘汰策略

2021-10-22 15:12:14 字數 1044 閱讀 3345

先進先出演算法(fifo)

least frequently used(lfu)

淘汰一定時期內被訪問次數最少的頁面,以次數作為參考

least recently used(lru)

淘汰最長時間未被使用的頁面,以時間作為參考

這些演算法在不同層次的快取上執行時擁有不同的效率和代價,需根據具體場合選擇最合適的一種。

lfu1、新加入資料插入到佇列尾部(因為引用計數為1);

2、 佇列中的資料被訪問後,引用計數增加,佇列重新排序;

3、當需要淘汰資料時,將已經排序的列表最後的資料塊刪除。

lru1、新資料插入到鍊錶頭部;

2、每當快取命中(即快取資料被訪問),則將資料移到鍊錶頭部;

3、當鍊表滿的時候,將鍊錶尾部的資料丟棄。

lru和lfu對比:

lru新插入就是在鍊錶頭部,並且有被訪問就移動到鍊錶頭部

lfu新插入在鍊錶尾部,有被訪問就向前移動一位

定時過期:每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清除。該策略可以立即清除過期的資料,對記憶體很友好;但是會占用大量的cpu資源去處理過期的資料,從而影響快取的響應時間和吞吐量。

惰性過期:只有當訪問乙個key時,才會判斷該key是否已過期,過期則清除。該策略可以最大化地節省cpu資源,卻對記憶體非常不友好。極端情況可能出現大量的過期key沒有再次被訪問,從而不會被清除,占用大量記憶體。

定期過期:每隔一定的時間,會掃瞄一定數量的資料庫的expires字典中一定數量的key,並清除其中已過期的key。該策略是前兩者的乙個折中方案。通過調整定時掃瞄的時間間隔和每次掃瞄的限定耗時,可以在不同情況下使得cpu和記憶體資源達到最優的平衡效果。(expires字典會儲存所有設定了過期時間的key的過期時間資料,其中,key是指向鍵空間中的某個鍵的指標,value是該鍵的毫秒精度的unix時間戳表示的過期時間。鍵空間是指該redis集群中儲存的所有鍵。)

redis中同時使用了惰性過期和定期過期兩種過期策略。

1 種不進行淘汰策略: noeviction

7 種進行淘汰策略,按照是否設定過期時間,進行資料集淘汰進行分類

Redis快取淘汰策略

在使用redis時,我們一般會為redis的快取空間設定乙個大小,不會讓資料無限制的放入redis快取。對於 redis 來說,一旦確定了快取最大容量,比如 4gb,你就可以使用下面這個命令來設定快取的大小了 config set maxmemory 4gb redis設定了快取的容量大小,那麼快取...

Redis 快取的淘汰策略

redis官方給的警告,當記憶體不足時,redis會根據配置的快取策略淘汰部分keys,以保證寫入成功。當無淘汰策略時或沒有找到適合淘汰的key時,redis直接返回out of memory錯誤。1 volatile lru 從已設定過期時間的資料集 server.db i expires 中挑選...

Redis淘汰策略

將 redis 用作快取時,如果記憶體空間用滿,就會自動驅逐老的資料。maxmemory用於指定 redis 能使用的最大記憶體。既可以在redis.conf檔案中設定,也可以在執行過程中通過 config set 命令動態修改 當記憶體使用達到最大限制時,如果需要儲存新資料,根據配置的策略 pol...