Redis不少時候都是在使用內存,數據一直寫,但內存是有限的,若是Redis內存滿了,那麼咱們的不少緩存操做都會超時、失敗,接着可能會引起雪崩。那麼當內存達到閥值Redis是怎麼處理的呢?redis
咱們能夠經過在配置文件中配置maxmemory來限制內存的最大使用狀況。若是maxmemory爲0則表示無限制。 在redis.cn中配置以下配置:緩存
maxmemory 1000mb //配置內存限制爲1G
默認的當內存達到咱們配置的指定大小時會返回錯誤,異常爲OOM異常
,即已經沒有足夠的內存供試用。這是由於默認狀況下Redis是不選擇任何內存回收策略的。dom
當內存達到最大限制時觸發內存回收策略。咱們能夠經過maxmemory-policy
來指定內存回收策略。 例如:maxmemory-policy volatile-ttl
code
noeviction: 禁止驅逐數據(默認);當內存達到限制時而且客戶端嘗試執行一些消耗內存的命令時返回錯誤,即OOM異常。 **allkeys-lru:**嘗試回收最少使用的鍵 **volatile-lru:**嘗試回收最少使用的鍵,但僅限於在已設置過時集合的鍵。 allkeys-random: 回收隨機的鍵 **volatile-random:**回收隨機的鍵,僅限於在已設置過時集合的鍵。 **volatile-ttl:**回收過時集合的鍵,而且優先回收存活時間較短的鍵,使得新添加的數據有地方可存放。進程
從redis4.0開始引入了一個新的策略模式:LFU全稱:Least Frequently Used。即最近不多使用。 兩種策略:volatile-lfu
和allkeys-lfu
。內存
volatile-lfu: 在已設置過時的數據集中選擇最不常使用的數據淘汰 allkeys-lfu: 從數據集中挑選最近最不常使用的數據淘汰。io
當客戶端運行了一個新的命令,添加了新的數據 Redis檢查內存使用狀況 ,若是大於maxmemory的限制,則根據設定好的策略進行回收 新的命令被執行。。。ast