Redis的過期策略和記憶體淘汰機制

2021-10-01 11:12:03 字數 979 閱讀 7625

我們set key的時候,都可以給乙個expire time,就是過期時間,指定這個key比如說只能存活1個小時,我們自己可以指定快取到期就失效。

如果假設你設定乙個一批key只能存活1個小時,那麼接下來1小時後,redis是怎麼對這批key進行刪除的?

答案是:定期刪除+惰性刪除

所謂定期刪除,指的是redis預設是每隔100ms就隨機抽取一些設定了過期時間的key,檢查其是否過期,如果過期就刪除。

注意,這裡可不是每隔100ms就遍歷所有的設定過期時間的key,那樣就是一場效能上的災難。

實際上redis是每隔100ms隨機抽取一些key來檢查和刪除的。

但是,定期刪除可能會導致很多過期key到了時間並沒有被刪除掉,所以就得靠惰性刪除了。

這就是說,在你獲取某個key的時候,redis會檢查一下 ,這個key如果設定了過期時間那麼是否過期了?如果過期了此時就會刪除,不會給你返回任何東西。

並不是key到時間就被刪除掉,而是你查詢這個key的時候,redis再懶惰的檢查一下

通過上述兩種手段結合起來,保證過期的key一定會被乾掉。

如果大量過期key堆積在記憶體裡,導致redis記憶體塊耗盡了,怎麼辦?

答案是:走記憶體淘汰機制。

noeviction:當記憶體不足以容納新寫入資料時,新寫入操作會報錯,這個一般沒人用吧

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

allkeys-random:當記憶體不足以容納新寫入資料時,在鍵空間中,隨機移除某個key,這個一般沒人用吧

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

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

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

Redis的過期策略和記憶體淘汰策略

redis的過期策略 我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 定時過期 每個設定過期時間的key都需要建立乙個定時器,到過期時間就會立即清...

Redis的過期策略和記憶體淘汰策略

在redis中我們對於鍵可以通過expire key time設定生存時間,當time時間過後鍵就會過期,redis會採用過期策略對過期的鍵進行刪除。過期策略主要是在cpu和記憶體之間進行權衡。可以將cpu的處理效率作為側重點進行選擇策略,也可以將記憶體的容量作為側重點進行選擇策略實際上redis採...

Redis的過期策略和記憶體淘汰策略

我們都知道,redis是key value資料庫,我們可以設定redis中快取的key的過期時間。redis的過期策略就是指當redis中快取的key過期了,redis如何處理。過期策略通常有以下三種 redis中同時使用了惰性過期和定期過期兩種過期策略。redis的記憶體淘汰策略是指在redis的...