更新時(shí)間:2023-04-24 來源:黑馬程序員 瀏覽量:
Redis對(duì)數(shù)據(jù)設(shè)置數(shù)據(jù)的有效時(shí)間,數(shù)據(jù)過期以后,就需要將數(shù)據(jù)從內(nèi)存中刪除掉。可以按照不同的規(guī)則進(jìn)行刪除,這種刪除規(guī)則就被稱之為數(shù)據(jù)的刪除策略(數(shù)據(jù)過期策略)。在Redis中提供了兩種數(shù)據(jù)刪除策略,惰性刪除和定期刪除,下面詳細(xì)來看。
惰性刪除
惰性刪除設(shè)置該key過期時(shí)間后,我們不去管它,當(dāng)需要該key時(shí),我們?cè)跈z查其是否過期,如果過期,我們就刪掉它,反之返回該key。
例如:
set name zhangsan10 get name//發(fā)現(xiàn)name過期了,直接刪除key
優(yōu)點(diǎn) :對(duì)CPU友好,只會(huì)在使用該key時(shí)才會(huì)進(jìn)行過期檢查,對(duì)于很多用不到的key不用浪費(fèi)時(shí)間進(jìn)行過期檢查。
缺點(diǎn) :對(duì)內(nèi)存不友好,如果一個(gè)key已經(jīng)過期,但是一直沒有使用,那么該key就會(huì)一直存在內(nèi)存中,內(nèi)存永遠(yuǎn)不會(huì)釋放。
定期刪除:每隔一段時(shí)間,我們就對(duì)一些key進(jìn)行檢查,刪除里面過期的key(從一定數(shù)量的數(shù)據(jù)庫中取出一定數(shù)量的隨機(jī)key進(jìn)行檢查,并刪除其中的過期key)。
定期清理有兩種模式:
? SLOW模式是定時(shí)任務(wù),執(zhí)行頻率默認(rèn)為10hz,每次不超過25ms,以通過修改配置文件redis.conf的hz選項(xiàng)來調(diào)整這個(gè)次數(shù)
? FAST模式執(zhí)行頻率不固定,但兩次間隔不低于2ms,每次耗時(shí)不超過1ms
優(yōu)點(diǎn):可以通過限制刪除操作執(zhí)行的時(shí)長(zhǎng)和頻率來減少刪除操作對(duì)CPU的影響。另外定期刪除,也能有效釋放過期鍵占用的內(nèi)存。
缺點(diǎn):難以確定刪除操作執(zhí)行的時(shí)長(zhǎng)和頻率。Redis的過期刪除策略:惰性刪除+定期刪除兩種策略進(jìn)行配合使用