日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Redis 數據刪除策略

作者:Ran959 更新時間: 2022-09-05 編程語言

1. 常見的刪除策略

常見的刪除策略有以下3種:

  • 定時刪除

在設置鍵的過期時間的同時,創建一個定時器,讓定時器在鍵的過期時間來臨時,立即執行對鍵的刪除操作。

  • 惰性刪除

放任過期鍵不管,每次從鍵空間中獲取鍵時,檢查該鍵是否過期,如果過期,就刪除該鍵,如果沒有過期,就返回該鍵。

  • 定期刪除

每隔一段時間,程序對數據庫進行一次檢查,刪除里面的過期鍵,至于要刪除哪些數據庫的哪些過期鍵,則由算法決定。

其中定時刪除和定期刪除為主動刪除策略,惰性刪除為被動刪除策略。

1.1 定時刪除策略

定時刪除策略通過使用定時器,定時刪除策略可以保證過期鍵盡可能快地被刪除,并釋放過期鍵占用的內存。

因此,定時刪除策略的優缺點如下所示:

  • 優點:對內存非常友好
  • 缺點:對CPU時間非常不友好

舉個例子,如果有大量的命令請求等待服務器處理,并且服務器當前不缺少內存,如果服務器將大量的CPU時間用來刪除過期鍵,那么服務器的響應時間和吞吐量就會受到影響。

也就是說,如果服務器創建大量的定時器,服務器處理命令請求的性能就會降低,因此Redis目前并沒有使用定時刪除策略。

1.2 惰性刪除策略

惰性刪除策略只會在獲取鍵時才對鍵進行過期檢查,不會在刪除其它無關的過期鍵花費過多的CPU時間。

因此,惰性刪除策略的優缺點如下所示:

  • 優點:對CPU時間非常友好
  • 缺點:對內存非常不友好

舉個例子,如果數據庫有很多的過期鍵,而這些過期鍵又恰好一直沒有被訪問到,那這些過期鍵就會一直占用著寶貴的內存資源,造成資源浪費。

1.3 定期刪除策略

定期刪除策略是定時刪除策略和惰性刪除策略的一種整合折中方案。

定期刪除策略每隔一段時間執行一次刪除過期鍵操作,并通過限制刪除操作執行的時長和頻率來減少刪除操作對CPU時間的影響,同時,通過定期刪除過期鍵,也有效地減少了因為過期鍵而帶來的內存浪費。

2. Redis使用的過期鍵刪除策略

Redis服務器使用的是惰性刪除策略和定期刪除策略。(逐出策略)
?Redis使用內存存儲數據,在執行每一天命令前,都會調用freeMemorylfNeeded()檢測內存釋放充足,如果內存不滿足要加入數據的最低要求,redis會臨時刪除一些數據為當前指令清理存儲空間。清理數據的策略稱為逐出算法。

2.1 惰性刪除策略的實現

過期鍵的惰性刪除策略由expireIfNeeded函數實現,所有讀寫數據庫的Redis命令在執行之前都會調用expireIfNeeded函數對輸入鍵進行檢查:

  • 如果輸入鍵已經過期,那么將輸入鍵從數據庫中刪除
  • 如果輸入鍵未過期,那么不做任何處理

以上描述可以使用如下流程圖表示:

2.2 定期刪除策略的實現

過期鍵的定期刪除策略由activeExpireCycle函數實現,每當Redis服務器的周期性操作serverCron函數執行時,activeExpireCycle函數就會被調用,它在規定的時間內,分多次遍歷服務器中的各個數據庫,從數據庫的expires字典中隨機檢查一部分鍵的過期時間,并刪除其中的過期鍵。

原文鏈接:https://blog.csdn.net/weixin_67588007/article/details/126455553

欄目分類
最近更新