Redis 丟棄策略

2021-10-03 03:57:50 字數 739 閱讀 8208

當redis記憶體超過物理記憶體限制時,記憶體資料會和磁碟產生頻繁的交換,讓redis的效能急劇下降。所以在生產環境,這種交換行為是不允許的。

maxmemory引數是用來配置最大記憶體大小的,如果超過了maxmemory,redis提供了如下幾種可選策略,用來設定maxmemory-policy。

lru演算法需要消耗大量額外的記憶體,所以redis採用的,實際上是一種近似lru演算法。redis給每個key增加了乙個字段,24bit,用於描述最後一次被訪問的時間戳。

當redis執行寫操作時,發現記憶體超出maxmemory,就會指定lru淘汰演算法。隨機取樣出5(可以設定)個key,然後淘汰掉最舊的key;如果淘汰後記憶體還是超出maxmemory,就繼續淘汰,指定記憶體低於maxmemory為止。

每次取樣多少,是通過maxmemory_samples進行設定的。

redis增加了淘汰池,以提公升lru演算法的效果。淘汰池是乙個陣列,每一次淘汰迴圈中,新的隨機得出的key列表,會和淘汰池中的key列表進行融合,淘汰掉最舊的乙個key之後,保留剩餘較舊的key列表在池中,等待下一次淘汰。

演算法流程如下:

redis執行寫操作時,發現記憶體大小超過maxmemory配置的值,觸發丟棄過程;

redis執行對快取的資料進行取樣,取樣數量取決於maxmemory_samples的配置;

根據每個key最後一次被訪問的時間戳排序,從取樣中選出時間最久的key;

將取樣中時間最久的key放入到淘汰池,並淘汰掉淘汰池中時間最久的key。

redis過期策略

1 noeviction 一旦記憶體滿則返回錯誤 2 allkeys lru 對所有的key進行lru 3 volatile lru 只對設定了過期的key進行lru 預設的方式 4 allkeys random 隨機剔除乙個key 5 volatile random 對設定過期的key進行隨機剔除...

Redis淘汰策略

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

Redis快取策略

redis快取一般使用cache aside pattern原則。什麼是 cache aside pattern cache aside pattern即為旁路快取方案的經驗實踐,分為讀實踐和寫實踐。那麼運算元據的時候先操作快取還是先運算元據庫?1.讀請求 先從快取中讀取所需資料,如果沒有則從資料庫...