如果redis中資料非常多,將伺服器中的記憶體都耗盡,這樣就會出現記憶體溢位的情況,redis開發組考慮到了這種問題,使用資料淘汰策略可以解決這個問題。
可以設定記憶體最大使用量,當記憶體使用量超出時,會施行資料淘汰策略。
redis 具體有 6 種淘汰策略:
策略描述
應用場景
volatile-lru
從已設定過期時間的資料集中挑選最近最少使用的資料淘汰
如果設定了過期時間,且分熱資料與冷資料,推薦使用 volatile-lru 策略。
volatile-ttl
從已設定過期時間的資料集中挑選將要過期的資料淘汰
如果讓 redis 根據 ttl 來篩選需要刪除的key,請使用 volatile-ttl 策略。
volatile-random
從已設定過期時間的資料集中任意選擇資料淘汰
很少使用
allkeys-lru
從所有資料集中挑選最近最少使用的資料淘汰
使用 redis 快取資料時,為了提高快取命中率,需要保證快取資料都是熱點資料。可以將記憶體最大使用量設定為熱點資料占用的記憶體量,然後啟用 allkeys-lru 淘汰策略,將最近最少使用的資料淘汰。
值得一提的是,設定 expire 會消耗額外的記憶體,所以使用 allkeys-lru 策略,可以更高效地利用記憶體,因為這樣就可以不再設定過期時間了。
allkeys-random
從所有資料集中任意選擇資料進行淘汰
如果需要迴圈讀寫所有的key,或者各個key的訪問頻率差不多,可以使用 allkeys-random 策略
noeviction
不刪除策略,達到最大記憶體限制時,如果需要更多記憶體,直接返回錯誤資訊。大多數寫命令都會導致占用更多的記憶體
很少使用
作為記憶體資料庫,出於對效能和記憶體消耗的考慮,redis 的淘汰演算法實際實現上並非針對所有 key,而是抽樣一小部分並且從中選出被淘汰的 key。
redis 4.0 引入了 volatile-lfu 和 allkeys-lfu 淘汰策略,lfu 策略通過統計訪問頻率,將訪問頻率最少的鍵值對淘汰。
您需要根據系統的特徵,來選擇合適的淘汰策略。 當然,在執行過程中也可以通過命令動態設定淘汰策略,並通過 info 命令監控快取的 miss 和 hit,來進行調優。
在這個過程中,記憶體使用量會不斷地達到 limit 值,然後超過,然後刪除部分 key,使用量又下降到 limit 值之下。
如果某個命令導致大量記憶體占用(比如通過新key儲存乙個很大的set),在一段時間內,可能記憶體的使用量會明顯超過 maxmemory 限制。
redis資料淘汰策略
在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1.5g 的記憶體大小,減少記憶體緊張的情況,由此獲取更為穩健的服務。redis 記憶體資料集大小上...
redis資料淘汰策略
redis 每服務客戶端執行乙個命令的時候,會檢測使用的記憶體是否超額。如果超額,即進行資料淘汰。在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1...
redis資料淘汰策略
在 redis 中,允許使用者設定最大使用記憶體大小 server.maxmemory,在記憶體限定的情況下是很有用的。譬如,在一台 8g 機子上部署了 4 個 redis 服務點,每乙個服務點分配 1.5g 的記憶體大小,減少記憶體緊張的情況,由此獲取更為穩健的服務。redis 記憶體資料集大小上...