Redis淘汰策略

2021-09-01 00:04:28 字數 1232 閱讀 9012

將 redis 用作快取時, 如果記憶體空間用滿, 就會自動驅逐老的資料。

maxmemory用於指定 redis 能使用的最大記憶體。既可以在redis.conf檔案中設定, 也可以在執行過程中通過 config set 命令動態修改

當記憶體使用達到最大限制時, 如果需要儲存新資料, 根據配置的策略(policies)的不同, redis可能直接返回錯誤資訊, 或者刪除部分老的資料。

fifo:first in first out,先進先出。判斷被儲存的時間,離目前最遠的資料優先被淘汰。

lru:least recently used,最近最少使用。判斷最近被使用的時間,目前最遠的資料優先被淘汰。

lfu:least frequently used,最不經常使用。在一段時間內,資料被使用次數最少的,優先被淘汰。

不刪除策略, 達到最大記憶體限制時, 如果需要更多記憶體, 直接返回錯誤資訊。 大多數寫命令都會導致占用更多的記憶體(有極少數會例外, 如 del )。

所有key通用; 優先刪除最近最少使用(less recently used ,lru) 的 key。

只限於設定了 expire 的部分; 優先刪除最近最少使用(less recently used ,lru) 的 key。

所有key通用; 隨機刪除一部分 key。

只限於設定了 expire 的部分; 隨機刪除一部分 key。

只限於設定了 expire 的部分; 優先刪除剩餘時間(time to live,ttl) 短的key。

一般來說:

如果分為熱資料與冷資料, 推薦使用 allkeys-lru 策略。 也就是, 其中一部分key經常被讀寫. 如果不確定具體的業務特徵, 那麼   allkeys-lru 是乙個很好的選擇。

如果需要迴圈讀寫所有的key, 或者各個key的訪問頻率差不多, 可以使用 allkeys-random 策略, 即讀寫所有元素的概率差不多。

假如要讓 redis 根據 ttl 來篩選需要刪除的key, 請使用 volatile-ttl 策略。

volatile-lru 和 volatile-random 策略主要應用場景是: 既有快取,又有持久key的例項中。 一般來說, 像這類場景, 應該使用兩個單獨的 redis 例項。

值得一提的是, 設定 expire 會消耗額外的記憶體, 所以使用 allkeys-lru 策略, 可以更高效地利用記憶體, 因為這樣就可以不再設定過期時間了

參考 :

redis 淘汰策略

lru least recently used 演算法,如果資料最近被訪問過,那麼將來被剛問的機率也是很高的。lfu lfu 如果資料過去被訪問多次,那麼將來被剛問的機率也是更高。過期策略 1惰性刪除,當key被訪問時檢查改key的過期時間,若已過期刪除,已過期未被訪問的資料保持在記憶體中,小號記憶...

redis 淘汰策略

redis 淘汰策略有哪些?1,volatile lru 從已設定過期時間的雜湊表 server.db i expires 中隨機挑選多個key,然後在選到的key中用lru演算法淘汰最近最少使用的資料 2,allkey lru 從所有key的雜湊表 server.db i dict 中隨機挑選多個...

redis資料淘汰策略

在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1.5g 的記憶體大小,減少記憶體緊張的情況,由此獲取更為穩健的服務。redis 記憶體資料集大小上...