一,有三種不同的刪除策略
(2),惰性清理。鍵過期了就過期了,不管。當讀/寫乙個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期key
(3),定期清理。每隔一段時間,對expires字典進行檢查,刪除裡面的過期鍵。
二,詳細說明三種清理方式的優劣
(1)立即清理
因為刪除操作會占用cpu的時間,如果剛好碰上了cpu很忙的時候,比如正在做交集或排序等計算的時候,就會給cpu造成額外的壓力。
(2)惰性刪除
惰性刪除是指,某個鍵值過期後,此鍵值不會馬上被刪除,而是等到下次被使用的時候,才會被檢查到過期,此時才能得到刪除。
所以惰性刪除的缺點很明顯:浪費記憶體。dict字典和expires字典都要儲存這個鍵值的資訊。
(3)定時刪除
定時刪除是:每隔一段時間執行一次刪除操作,並通過限制刪除操作執行的時長和頻率,來減少刪除操作對cpu的影響。
另一方面定時刪除也有效的減少了因惰性刪除帶來的記憶體浪費。
三,目前redis使用的過期鍵值刪除策略是:
惰性刪除加上定期刪除,兩者配合使用。
四,詳細說明定時清理機制
這個和redis.conf 的hz 10配置有關。
首先說一下時間事件,對於持續執行的伺服器來說, 伺服器需要定期對自身的資源和狀態進行必要的檢查和整理,
從而讓伺服器維持在乙個健康穩定的狀態, 這類操作被統稱為常規操作(cron job)
在 redis 中, 常規操作由 redis.c/servercron 實現, 它主要執行以下操作
•更新伺服器的各類統計資訊,比如時間、記憶體占用、資料庫占用情況等。
•清理資料庫中的過期鍵值對。
•關閉和清理連線失效的客戶端。
•嘗試進行 aof 或 rdb 持久化操作。
•如果伺服器是主節點的話,對附屬節點進行定期同步。
•如果處於集群模式的話,對集群進行定期同步和連線測試。
redis 將 servercron 作為時間事件來執行, 從而確保它每隔一段時間就會自動執行一次,
又因為 servercron 需要在 redis 伺服器執行期間一直定期執行, 所以它是乙個迴圈時間事件: servercron 會一直定期執行,直到伺服器關閉為止。
比如redis-3.0.0中的hz預設值是10,代表每秒鐘呼叫10次後台任務。
典型的方式為,redis每秒做10次如下的步驟:
•隨機測試100個設定了過期時間的key
•刪除所有發現的已過期的key
•若刪除的key超過25個則重複步驟1
總結:redis會在hz的頻率下(n次每秒),會在一定時間限制內盡可能多的刪除過期key。
Redis 鍵(KEY)過期策略
那你有沒有想過乙個問題,redis裡面如果有大量的key,怎樣才能高效的找出 過期的key並將其刪除呢,難道是遍歷每乙個key嗎?假如同一時期過期的key非常多,redis會不會因為一直處理過期事件,而導致讀寫指令的卡頓。這裡說明一下,redis是單執行緒的,所以一些耗時的操作會導致redis卡頓,...
Redis的key過期處理策略
redis中有三種處理策略 定時刪除 惰性刪除和定期刪除。定時刪除 在設定鍵的過期時間的時候建立乙個定時器,當過期時間到的時候立馬執行刪除操作。不過這種處理方式是即時的,不管這個時間內有多少過期鍵,不管伺服器現在的執行狀況,都會立馬執行,所以對cpu不是很友好。惰性刪除 惰性刪除策略不會在鍵過期的時...
Redis的key過期設定 查詢 清理
1.redis過期時間介紹 有時候我們並不希望redis的key一直存在。例如快取,驗證碼等資料,我們希望它們能在一定時間內自動的被銷毀。redis提供了一些命令,能夠讓我們對key設定過期時間,並且讓key過期之後被自動刪除 2.redis過期時間相關命令 1.expire pexpire exp...