Redis資料淘汰策略

2021-10-12 06:37:19 字數 1279 閱讀 2356

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