redis中有三種處理策略:定時刪除、惰性刪除和定期刪除。
定時刪除:在設定鍵的過期時間的時候建立乙個定時器,當過期時間到的時候立馬執行刪除操作。不過這種處理方式是即時的,不管這個時間內有多少過期鍵,不管伺服器現在的執行狀況,都會立馬執行,所以對cpu不是很友好。
惰性刪除:惰性刪除策略不會在鍵過期的時候立馬刪除,而是當外部指令獲取這個鍵的時候才會主動刪除。處理過程為:接收get執行、判斷是否過期(這裡按過期判斷)、執行刪除操作、返回nil(空)。
定期刪除:定期刪除是設定乙個時間間隔,每個時間段都會檢測是否有過期鍵,如果有執行刪除操作。這個概念應該很好理解。
看完上面三種策略後可以得出以下結論:
4. 1、3為主動刪除,2為被動刪除。
5. 1是實時執行的,對cpu不是很友好,但是這在最大程度上釋放了記憶體,所以這種方式算是一種記憶體優先優化策略。
6. 2、3為被動刪除,所以過期鍵應該會存在一定的時間,這樣就使得過期鍵不會被立馬刪除,仍然占用著記憶體。但是惰性刪除的時候一般是單個刪除,相對來說對cpu是友好的。
7. 定期鍵這種刪除策略是一種讓人很蛋疼的策略,它既有避免1、2兩種策略劣勢的可能,也有同時發生1、2兩種策略劣勢的可能。如果定期刪除執行的過於頻繁就可能會演變成定時刪除,如果執行的過少就有可能造成過多過期鍵未被刪除而占用過多記憶體,如果時間的設定不是太好,既可能占用過多記憶體又同時對cpu產生不好的影響。所以。使用定期刪除的時候一定要把握好這個刪除的時間點。存在即為合理,既然開發的時候有這種策略,就說明定期刪除還是有他的優勢的,具體大家可以自己琢磨。
Redis 鍵(KEY)過期策略
那你有沒有想過乙個問題,redis裡面如果有大量的key,怎樣才能高效的找出 過期的key並將其刪除呢,難道是遍歷每乙個key嗎?假如同一時期過期的key非常多,redis會不會因為一直處理過期事件,而導致讀寫指令的卡頓。這裡說明一下,redis是單執行緒的,所以一些耗時的操作會導致redis卡頓,...
redis過期key的清理策略
一,有三種不同的刪除策略 2 惰性清理。鍵過期了就過期了,不管。當讀 寫乙個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期key 3 定期清理。每隔一段時間,對expires字典進行檢查,刪除裡面的過期鍵。二,詳細說明三種清理方式的優劣 1 立即清理 因為刪除操作會占用cpu的時間,如果...
Redis記憶體淘汰策略與過期key處理策略
redis對於過期鍵有三種清除策略 1.被動刪除 當讀 寫乙個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期 key2.主動刪除 由於惰性刪除策略無法保證冷資料被及時刪掉,所以redis會定期主動淘汰一 批已過期的key 3.當前已用記憶體超過maxmemory限定時,觸發主動清理策略 ...