1. 程式人生 > >redis 過期淘汰機制

redis 過期淘汰機制

redis是基於記憶體的,記憶體都是有限的,如果我們往redis中新增的資料超出了redis的記憶體範圍會怎麼樣呢?
答案:某些資料將會被刪除

那麼如何刪除呢?

  • 手動設定過期時間:比如使用set key (expire time)設定為1個小時過期,那麼1個小時之後get key還能不能得到資料呢? 答案肯定是得不到的了,那就證明資料被刪除了嗎?顯然不是,設定過期時間,redis也只是 ---- 定期刪除+惰性刪除
  • 簡單說:設定了過期的key,redis會定期去檢查當前過期的,然後刪除,但是不是遍歷所有key找出過期的,而是隨機抽取,那麼這樣定期刪除肯定就不能保證所有過期的key被刪除掉,那記憶體中就會堆積大量過期的key,當然當我們手動 get key時如果過期了,則redis會刪除,那麼如果沒有被隨機抽取我們也沒有手動去操作的過期key,redis如何處理呢—— “淘汰”策略

Redis 有哪幾種資料“淘汰”策略?

  • 記憶體淘汰策略(LRU演算法)
    • noeviction:當記憶體不足以容納新寫入資料時,新寫入操作會報錯。一般不使用
    • allkeys-lru:當記憶體不足以容納新寫入資料時,在鍵空間中,移除最近最少使用的key(這個是最常用的)
    • allkeys-random:當記憶體不足以容納新寫入資料時,在鍵空間中,隨機移除某個key
    • volatile-lru:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,移除最近最少使用的key
    • volatile-random:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,隨機移除某個key
    • volatile-ttl:當記憶體不足以容納新寫入資料時,在設定了過期時間的鍵空間中,有更早過期時間的key優先移