1. 程式人生 > 其它 >redis過期鍵

redis過期鍵

一、過期設定

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