redis過期淘汰機制 2020面試必看

2021-10-06 20:37:08 字數 1122 閱讀 5475

最大記憶體設定

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

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

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

maxmemory 100mb

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

· 根據配置的資料淘汰策略嘗試淘汰資料,釋放空間

· 如果沒有資料可以淘汰,或者沒有配置資料淘汰策略,那麼redis會對所有寫請求返回錯誤,但讀請求仍然可以正常執行

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

· 如果採用了redis的主從同步,主節點向從節點同步資料時,會占用掉一部分記憶體空間,如果maxmemory過於接近主機的可用記憶體,導致資料同步時記憶體不足。所以設定的maxmemory不要過於接近主機可用的記憶體,留出一部分預留用作主從同步。

資料淘汰機制

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

· volatile-lru:使用lru演算法進行資料淘汰(淘汰上次使用時間最早的,且使用次數最少的key),只淘汰設定了有效期的key

· allkeys-lru:使用lru演算法進行資料淘汰,所有的key都可以被淘汰

· volatile-random:隨機淘汰資料,只淘汰設定了有效期的key

· allkeys-random:隨機淘汰資料,所有的key都可以被淘汰

· volatile-ttl:淘汰剩餘有效期最短的key

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

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

redis 過期 淘汰 事務原子機制

set key value ex 60 鍵值對存活60秒 set key value px 60 鍵值對存活60毫秒 expire key 60 key60秒之後失效,在2.6版本之後使用pexpire設定毫秒數 3 檢視乙個key的有效期 ttl key 在2.6版本以上可以使用pttl,檢視毫秒...

redis過期機制和淘汰策略

redis的過期key刪除機制 這樣就會導致乙個問題,假設乙個key過期了,我也不去訪問。他就會一直存在記憶體當中,所以可能會導致記憶體滿掉,因此redis還引入了記憶體淘汰機制。通過maxmemory 配置項來設定允許使用者使用的最大記憶體大小,當記憶體資料集大小達到一定的大小時,就會根據配置項配...

Redis之過期策略 資料淘汰機制

過期策略指的是ttl到期時的處理策略,淘汰策略指的是記憶體滿了的情況下的策略 redis可以對key設定過期時間,這是乙個非常實用的功能,那redis是如何實現這個機制的呢?答案就是 定期刪除 惰性刪除 結合定期刪除 惰性刪除redis 實現了key的過期時間機制,但還是會有一些key會沒有被定期刪...