redis怎么刪數(shù)據(jù)

redis怎么刪數(shù)據(jù)

Redis常用的刪除策略有以下三種:

1.被動(dòng)刪除(惰性刪除):當(dāng)讀/寫一個(gè)已經(jīng)過期的Key時(shí),會(huì)觸發(fā)惰性刪除策略,直接刪除掉這個(gè)Key;

2.主動(dòng)刪除(定期刪除):Redis會(huì)定期巡檢,來清理過期Key;

3.當(dāng)內(nèi)存達(dá)到maxmemory配置時(shí)候,會(huì)觸發(fā)Key的刪除操作;

主動(dòng)刪除

在 Redis 中,常規(guī)操作由?redis.c/serverCron?實(shí)現(xiàn),它主要執(zhí)行以下操作:

1.更新服務(wù)器的各類統(tǒng)計(jì)信息,比如時(shí)間、內(nèi)存占用、數(shù)據(jù)庫占用情況等。

2.清理數(shù)據(jù)庫中的過期鍵值對。

3.對不合理的數(shù)據(jù)庫進(jìn)行大小調(diào)整。

4.關(guān)閉和清理連接失效的客戶端。

5.嘗試進(jìn)行 AOF 或 RDB 持久化操作。

6.如果服務(wù)器是主節(jié)點(diǎn)的話,對附屬節(jié)點(diǎn)進(jìn)行定期同步。

如果處于集群模式的話,對集群進(jìn)行定期同步和連接測試。

Redis 將 serverCron 作為時(shí)間事件來運(yùn)行,從而確保它每隔一段時(shí)間就會(huì)自動(dòng)運(yùn)行一次, 又因?yàn)?serverCron 需要在 Redis 服務(wù)器運(yùn)行期間一直定期運(yùn)行, 所以它是一個(gè)循環(huán)時(shí)間事件:serverCron 會(huì)一直定期執(zhí)行,直到服務(wù)器關(guān)閉為止。

總結(jié)

如果Redis中每天過期大量Key(比如幾千萬),那么必須得考慮過期Key的清理:

增加Redis主動(dòng)清理的頻率(通過調(diào)大hz參數(shù))

手動(dòng)清理過期Key,最簡單的方法是進(jìn)行scan操作,scan操作會(huì)觸發(fā)第一種被動(dòng)刪除,scan操作時(shí)候別忘了加count;

dbsize命令返回的Key數(shù)量,包含了過期Key

randomkey命令返回的Key,不包含過期Key

scan命令返回的Key,包含過期Key

info命令返回的# Keyspace

db6:keys=1034937352,expires=994731489,avg_ttl=507838502

keys對應(yīng)的Key數(shù)量等同于dbsize

expires指的是設(shè)置了過期時(shí)間的Key數(shù)量

avg_ttl指設(shè)置了過期時(shí)間的Key的平均過期時(shí)間(單位:毫秒)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊14 分享