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

2021-09-28 23:40:44 字數 1240 閱讀 1089

過期策略指的是ttl到期時的處理策略,淘汰策略指的是記憶體滿了的情況下的策略

redis可以對key設定過期時間,這是乙個非常實用的功能,那redis是如何實現這個機制的呢?答案就是:定期刪除 + 惰性刪除

結合定期刪除 + 惰性刪除redis 實現了key的過期時間機制,但還是會有一些key會沒有被定期刪除掉,也沒有被查詢,就遺留在了記憶體中,當資料量大到一定程度後,會導致記憶體的堆積。這就涉及到了記憶體淘汰機制

當記憶體容量到達了上限或者 配置的maxmemory時,會觸發記憶體淘汰策略

redis提供了幾種策略供我們選擇:

1)noeviction:當記憶體不足以容納新寫入資料時,新寫入操作會報錯。

2)allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間中,移除最近最少使用的key。

3)allkeys-random:當記憶體不足以容納新寫入資料時,在鍵空間中,隨機移除某個key。

4)volatile-lru:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,移除最近最少使用的key。

5)volatile-random:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,隨機移除某個key。

6)volatile-ttl:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,有更早過期時間的key優先移除。

先明確一下lrulfu:

redis.conf中:

至於lru與lfu的選擇,則需要根據業務權衡到底是選擇淘汰最近最少使用(lru)還是選擇最不經常使用(lfu)

總的來說,無論是lrulfuttl還是random都是幾近演算法來實現的,在可靠性和效能上做了一定的平衡。還是應該在業務中主動刪除沒有價值的資料,或者更新某些key的過期時間等來提高redis的效能和空間,不能過分依賴於淘汰策略。

Redis 資料過期淘汰策略

redis經常被用來作為快取資料庫,有很多資料都是臨時快取一下,可能用過之後很久都不會再用到了,如果不進行處理,那麼快取資料堆積會導致記憶體洩漏,然後系統奔潰。setex string key,int seconds,string value 字串獨有的方式 expire key seconds 將...

redis筆記之過期策略

redis是乙個記憶體型資料庫,可以減少資料讀寫給磁碟帶來的壓力。資料否存在與記憶體,肯定會涉及到記憶體滿的問題。記憶體滿了,要如何處理呢?redis設定key時,可以設定乙個過期時間,那過期了的,可以進行乙個刪除,那它是如何刪除的呢?那沒設定時間的資料,或者過期很長的,那是不是還是會滿的,那要怎麼...

Redis 過期策略 和 淘汰策略

適用於 很多的 key 可能會到了過期時間還沒有進行刪除的情況。放任 key 過期不管,但是每次從鍵空間中獲取 key 時,都檢查取得的 key 是否過期,如果過期的話,就刪除該 key 如果沒有過期,就返回該 key 每隔一段時間程式就對資料庫進行一次檢查,刪除裡面的過期的 key 至於要刪除多少...