redis 記憶體管理與資料淘汰機制

2021-10-06 10:36:35 字數 1622 閱讀 8885

預設情況下,在32位os中,redis最大使用3gb的記憶體,在64位os中則沒有限制。

在使用redis時,應該對資料占用的最大空間有乙個基本準確的預估,並為redis設定最大使用的記憶體。否則在64位os中redis會無限制地占用記憶體(當物理記憶體被佔滿後會使用swap空間),容易引發各種各樣的問題。

通過如下配置控制redis使用的最大記憶體:

maxmemory 100mb
maxmemory 的用法

maxmemory 1048576

maxmemory 1048576b

maxmemory 1000kb

maxmemory 100mb

maxmemory 1gb

maxmemory 1000k

maxmemory 100m

maxmemory 1g

沒有帶單位尾巴的為位元組數,以b結尾的表示相應的大小。但需要注意kb和k、mb和m、gb和g是不同的,如1k表示1000位元組,而1kb則為1024位元組。如果maxmemory值為0,表示不做限制。

如果是32位系統,當maxmemory值為0時,redis啟動時會記錄warn日誌:

如果要檢視maxmemory的值,有如下兩種方法:

redis-cli -h 192.168

.31.8

-p 6379 config get maxmemory

或redis-cli -h 192.168

.31.8

-p 6379 info memory | grep maxmemory

在記憶體占用達到了maxmemory後,再向redis寫入資料時,redis會:

在為redis設定maxmemory時,需要注意:

redis提供了6種資料淘汰策略:

redis 確定驅逐某個鍵值對後,會刪除這個資料並,並將這個資料變更訊息發布到本地(aof 持久化)和從機(主從連線)。

如果設定了過期時間,在達到記憶體最大的時候,建議可以使用第一種volatile-lru淘汰策略

如果沒有設定過期時間,在達到記憶體最大時候,建議使用allkeys-lru淘汰策略

最好為redis指定一種有效的資料淘汰策略以配合maxmemory設定,避免在記憶體使用滿後發生寫入失敗的情況。

一般來說,推薦使用的策略是volatile-lru,並辨識redis中儲存的資料的重要性。對於那些重要的,絕對不能丟棄的資料(如配置類資料等),應不設定有效期,這樣redis就永遠不會淘汰這些資料。對於那些相對不是那麼重要的,並且能夠熱載入的資料(比如快取最近登入的使用者資訊,當在redis中找不到時,程式會去db中讀取),可以設定上有效期,這樣在記憶體不夠時redis就會淘汰這部分資料。

配置方法:

maxmemory-policy volatile-lru   #預設是noeviction,即不進行資料淘汰
在redis中,redis允許使用者更改設定最大記憶體maxmemory,在每次寫入或更新等操作時候,redis會檢查使用的記憶體,當記憶體達到最大值得時候,就會進行資料淘汰策略,從而換取記憶體出來

Redis記憶體管理與資料淘汰機制

資料淘汰機制 預設情況下,在32位os中,redis最大使用3gb的記憶體,在64位os中則沒有限制。在使用redis時,應該對資料占用的最大空間有乙個基本準確的預估,並為redis設定最大使用的記憶體。否則在64位os中redis會無限制地占用記憶體 當物理記憶體被佔滿後會使用swap空間 容易引...

Redis的記憶體管理 記憶體淘汰

給redis設定一些位元組大小去限制記憶體使用,當redis達到所設定的記憶體大小,redis將會刪除一些key,根據所制定的記憶體淘汰策略。如果redis不能刪除key根據所給的策略,或者如果當前的淘汰策略是novication,有新的key進來的時候,redis將回出錯,比如set操作 lpus...

記憶體淘汰演算法 Redis資料淘汰演算法

眾所周知,redis的所有資料都儲存在記憶體中,但是記憶體是一種有限的資源,所以為了防止redis無限制的使用記憶體,在啟動redis時可以通過配置項maxmemory來指定其最大能使用的記憶體容量。例如可以通過以下配置來設定redis最大能使用 1g 記憶體 maxmemory 1g當redis使...