Redis常用的刪除策略有以下三種:
1.被動刪除(惰性刪除):當讀/寫一個已經過期的Key時,會觸發惰性刪除策略,直接刪除掉這個Key;
2.主動刪除(定期刪除):Redis會定期巡檢,來清理過期Key;
3.當記憶體達到maxmemory配置時候,會觸發Key的刪除操作;
主動刪除
在Redis 中,常規作業由 redis.c/serverCron 實現,它主要執行以下操作:
1.更新伺服器的各類統計信息,例如時間、記憶體佔用、資料庫佔用情況等。
2.清理資料庫中的過期鍵值對。
3.對不合理的資料庫進行大小調整。
4.關閉和清理連線失效的客戶端。
5.嘗試進行 AOF 或 RDB 持久化操作。
6.如果伺服器是主節點的話,對附屬節點進行定期同步。
如果處於叢集模式的話,對叢集進行定期同步和連接測試。
Redis 將serverCron 作為時間事件來運行,從而確保它每隔一段時間就會自動運行一次, 又因為serverCron 需要在Redis 伺服器運行期間一直定期運行, 所以它是一個循環時間事件:serverCron會一直定期執行,直到伺服器關閉為止。
總結
如果Redis中每天過期大量Key(例如幾千萬),那麼就必須考慮過期Key的清理:
增加Redis主動清理的頻率(透過調大hz參數)
手動清理過期Key,最簡單的方法是進行scan操作,scan操作會觸發第一種被動刪除,scan操作時候別忘了加count;
dbsize指令回傳的Key數量,包含了過期Key
randomkey指令回傳的Key,不包含過期Key
scan指令回傳的Key,包含過期Key
info指令傳回的# Keyspace
db6:keys=1034937352,expires=994731489,avg_ttl=507838502
keys對應的Key等同於dbsize
#於dbsizeexpires指的是設定了過期時間的Key數量avg_ttl指設定了過期時間的Key的平均過期時間(單位:毫秒)###以上是redis怎麼刪數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!