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

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

Redis 數(shù)據(jù)刪除策略

作者:Ran959 更新時(shí)間: 2022-09-05 編程語(yǔ)言

1. 常見的刪除策略

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

  • 定時(shí)刪除

在設(shè)置鍵的過(guò)期時(shí)間的同時(shí),創(chuàng)建一個(gè)定時(shí)器,讓定時(shí)器在鍵的過(guò)期時(shí)間來(lái)臨時(shí),立即執(zhí)行對(duì)鍵的刪除操作。

  • 惰性刪除

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

  • 定期刪除

每隔一段時(shí)間,程序?qū)?shù)據(jù)庫(kù)進(jìn)行一次檢查,刪除里面的過(guò)期鍵,至于要?jiǎng)h除哪些數(shù)據(jù)庫(kù)的哪些過(guò)期鍵,則由算法決定。

其中定時(shí)刪除和定期刪除為主動(dòng)刪除策略,惰性刪除為被動(dòng)刪除策略。

1.1 定時(shí)刪除策略

定時(shí)刪除策略通過(guò)使用定時(shí)器,定時(shí)刪除策略可以保證過(guò)期鍵盡可能快地被刪除,并釋放過(guò)期鍵占用的內(nèi)存。

因此,定時(shí)刪除策略的優(yōu)缺點(diǎn)如下所示:

  • 優(yōu)點(diǎn):對(duì)內(nèi)存非常友好
  • 缺點(diǎn):對(duì)CPU時(shí)間非常不友好

舉個(gè)例子,如果有大量的命令請(qǐng)求等待服務(wù)器處理,并且服務(wù)器當(dāng)前不缺少內(nèi)存,如果服務(wù)器將大量的CPU時(shí)間用來(lái)刪除過(guò)期鍵,那么服務(wù)器的響應(yīng)時(shí)間和吞吐量就會(huì)受到影響。

也就是說(shuō),如果服務(wù)器創(chuàng)建大量的定時(shí)器,服務(wù)器處理命令請(qǐng)求的性能就會(huì)降低,因此Redis目前并沒有使用定時(shí)刪除策略。

1.2 惰性刪除策略

惰性刪除策略只會(huì)在獲取鍵時(shí)才對(duì)鍵進(jìn)行過(guò)期檢查,不會(huì)在刪除其它無(wú)關(guān)的過(guò)期鍵花費(fèi)過(guò)多的CPU時(shí)間。

因此,惰性刪除策略的優(yōu)缺點(diǎn)如下所示:

  • 優(yōu)點(diǎn):對(duì)CPU時(shí)間非常友好
  • 缺點(diǎn):對(duì)內(nèi)存非常不友好

舉個(gè)例子,如果數(shù)據(jù)庫(kù)有很多的過(guò)期鍵,而這些過(guò)期鍵又恰好一直沒有被訪問(wèn)到,那這些過(guò)期鍵就會(huì)一直占用著寶貴的內(nèi)存資源,造成資源浪費(fèi)。

1.3 定期刪除策略

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

定期刪除策略每隔一段時(shí)間執(zhí)行一次刪除過(guò)期鍵操作,并通過(guò)限制刪除操作執(zhí)行的時(shí)長(zhǎng)和頻率來(lái)減少刪除操作對(duì)CPU時(shí)間的影響,同時(shí),通過(guò)定期刪除過(guò)期鍵,也有效地減少了因?yàn)檫^(guò)期鍵而帶來(lái)的內(nèi)存浪費(fèi)。

2. Redis使用的過(guò)期鍵刪除策略

Redis服務(wù)器使用的是惰性刪除策略和定期刪除策略。(逐出策略)
?Redis使用內(nèi)存存儲(chǔ)數(shù)據(jù),在執(zhí)行每一天命令前,都會(huì)調(diào)用freeMemorylfNeeded()檢測(cè)內(nèi)存釋放充足,如果內(nèi)存不滿足要加入數(shù)據(jù)的最低要求,redis會(huì)臨時(shí)刪除一些數(shù)據(jù)為當(dāng)前指令清理存儲(chǔ)空間。清理數(shù)據(jù)的策略稱為逐出算法。

2.1 惰性刪除策略的實(shí)現(xiàn)

過(guò)期鍵的惰性刪除策略由expireIfNeeded函數(shù)實(shí)現(xiàn),所有讀寫數(shù)據(jù)庫(kù)的Redis命令在執(zhí)行之前都會(huì)調(diào)用expireIfNeeded函數(shù)對(duì)輸入鍵進(jìn)行檢查:

  • 如果輸入鍵已經(jīng)過(guò)期,那么將輸入鍵從數(shù)據(jù)庫(kù)中刪除
  • 如果輸入鍵未過(guò)期,那么不做任何處理

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

2.2 定期刪除策略的實(shí)現(xiàn)

過(guò)期鍵的定期刪除策略由activeExpireCycle函數(shù)實(shí)現(xiàn),每當(dāng)Redis服務(wù)器的周期性操作serverCron函數(shù)執(zhí)行時(shí),activeExpireCycle函數(shù)就會(huì)被調(diào)用,它在規(guī)定的時(shí)間內(nèi),分多次遍歷服務(wù)器中的各個(gè)數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)的expires字典中隨機(jī)檢查一部分鍵的過(guò)期時(shí)間,并刪除其中的過(guò)期鍵。

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

欄目分類
最近更新