- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業務經營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯網協會理事單位
- 安全聯盟認證網站身份V標記
- 域名注冊服務機構許可:滇D3-20230001
- 代理域名注冊服務機構:新網數碼
Redis 中數據庫鍵的過期時間都保存在過期字典中,當一個鍵過期了,Redis 存在三種不同的刪除策略:定時刪除、惰性刪除和定期刪除
在設置鍵的過期時間的同時創建一個計時器,讓定時器在鍵過期時間來臨時,立即執行對鍵的刪除操作。
定時刪除策略對內存是最友好的:通過使用定時器,定時刪除策略可以保證過期鍵會盡快被刪除,并且釋放過期鍵所占用的內存。
但是另一方面,它對 CPU 時間是嘴不友好的:在過期鍵比較多的情況下,刪除過期鍵這一行為可能會占用相當一部分的 CPU 時間,在內存不緊張但是 CPU 時間緊張的情況下,將 CPU 時間用在刪除和當前任務無關的過期鍵上,無疑會對服務器的響應時間和吞吐量造成影響。
放任過期鍵不管,但是每次從鍵空間中獲取鍵時都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵;如果沒有過期則返回該鍵。
惰性刪除策略對 CPU 時間來說是最友好的,但是它對內存是最不友好的:如果一個鍵已經過期,而這個鍵又恰好沒有被訪問到的話,那么它可能永遠都不回被刪除,甚至可以將這種情況視為一種內存泄漏 —— 無用的垃圾數據占用了大量的內存,而服務器卻不能主動去釋放它們,這對于運行狀態非常依賴于內存的 Redis 服務器來說,并不是一個好消息。
每隔一段時間,程序都會對數據庫進行一次檢查,刪除里面的過期鍵。至于要刪除多少過期鍵,以及要檢查多少個數據庫,則由算法決定。
從上面對定時刪除和惰性刪除的討論來看,這兩種刪除方式在單一使用時都有非常明顯的缺陷,定期刪除策略可以看作是兩種策略的一種整合和折中:
定期刪除策略每隔一段時間執行一次刪除過期鍵操作,并通過限制刪除操作執行的時長和頻率來減少刪除操作對 CPU 時間的影響。
通過定期刪除過期鍵,定期刪除策略有效減少了因為過期鍵而帶來的內存浪費
但是定期刪除策略的難點是確定刪除操作執行的時長和頻率:
如果刪除操作執行太過頻繁,或者執行的時間太長,定期刪除策略就會退化成定時刪除策略,以至于 CPU 時間過多的消耗在刪除過期鍵上
如果刪除操作執行的太少,或者執行的時間太短,定期刪除策略又會和惰性刪除策略一樣,出現浪費內存的情況
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP