redis過期鍵
阿新 • • 發佈:2021-08-03
一、過期設定
1.1 過期設定的指令
- Redis是key-value資料庫,我們可以設定Redis中快取的key的過期時間
- expire可以設定過期時間
1 SET key value // 存入鍵值對
2
3 EXPIRE key 5 // 設定過期時間(秒)
4 PEXPIRE key 5000 // 設定過期時間(毫秒)
5
6 TTL key // 返回key剩餘過期時間(Time To Live)
7
8 PRESIST key // 移除鍵的過期時間
9
10 TIME // 檢視當前時間戳
1.2 指令轉換關係
- 所有設定時間的指令最終都會轉換成為PEXPIREAT指令:以毫秒精度,設定過期時間(一個UNIX時間戳),當過期時間來臨時,伺服器自動刪除該鍵
- EXPIREAT:以秒為單位設定過期時間(時間戳)
- 轉換關係:
1.3 檢查過期策略
- 檢查給定鍵是否存在過期字典,如果存在,則取得鍵的過期時間(redisDb.expires過期字典儲存了所有鍵過期時間)
- 檢查當前的UNIX時間戳是否大於鍵的過期時間,大於的話則鍵已經過期
二、清除策略
2.1 定時過期
每個設定過期時間的key建立一個定時器,到過期時間就會立即清除。
- 優點:記憶體友好,及時清理
- 缺點:佔用大量的CPU資源處理過期資料,影響快取的響應時間和吞吐量
2.2 惰性過期
訪問一個key時,才判斷該key是否已經過期,過期則清除。
- 優點:最大化節約CPU資源
- 缺點:對記憶體不友好,可能存在大量key沒有再次被訪問而佔用大量記憶體的問題
2.3 定期過期
每隔一段時間,掃描一定數量的資料庫expires字典中一定數量的key,清除其中過期的key。
- 優點:定期過期是對上面兩種方式的一種整合和折中,通過調整定時掃描的時間間隔和每次掃描的限定耗時,可以在不同情況下使得CPU和記憶體資源達到最優的平衡效果。
- 缺點:難以確定刪除操作執行的時長、頻率
Redis伺服器使用了惰性過期和定期過期兩種過期策略。
三、持久化對過期鍵處理
3.1 RDB
- 儲存快照時,過期鍵不儲存
- 載入RDB檔案時
- 主伺服器:檢查剔除過期鍵(不載入過期鍵)
- 從伺服器:會載入所有資料(載入過期鍵),不過主伺服器在資料同步的時候,從伺服器的資料會被清空,所以載入過期鍵並不會造成影響
3.2 AOF
- 檔案寫入時,如果某個鍵已經過期
- 沒有被惰性過期/定期過期刪除,AOF不會因為鍵過期產生任何影響(儲存寫操作)
- 當過期鍵被惰性過期/定期過期刪除,程式向AOF中追加一條DEL命令來表示該鍵已經被刪除
- 檔案重寫時,檢查剔除過期鍵(已過期鍵不會被重寫入AOF檔案中)
3.3 主從複製
- 主伺服器刪除一個過期鍵後,會顯示地向所有從伺服器傳送一個DEL命令,告知從伺服器刪除過期鍵
- 從伺服器在執行客戶端傳送地讀命令時,即使遇到過期鍵也不會刪除(惰性過期),而是繼續像處理未過期鍵一樣處理過期鍵,會正常返回查詢結果。
- 從伺服器只有在收到主伺服器發來的DEL命令之後,才會刪除過期鍵
本文來自部落格園,作者:Mr-xxx,轉載請註明原文連結:https://www.cnblogs.com/MrLiuZF/p/15092024.html