將 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 記憶體資料集大小上...