首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Redis 鍵過期機制詳解:EXPIRE/TTL/PERSIST、精度演進、主從同步與淘汰算法

     編輯:DB2 教學

過期命令族

  • EXPIRE key seconds:設定存活秒數,返回 1 成功 / 0 失敗(鍵不存在)。
  • TTL key:返回剩餘秒數,-1 表無過期,-2 表鍵不存在。
  • PERSIST key:移除過期時間,轉為持久鍵。
  • PEXPIRE/PTTL:毫秒級精度版本 (Redis 2.6+)。

過期時間特性

  • 僅 DEL、SET、GETSET 會清除過期時間;INCR/LPUSH/HSET 等修改操作保留原過期時間。
  • RENAME 會將過期時間轉移至新鍵;覆蓋式重命名則繼承來源鍵特性。

精度演進

  • Redis 2.4:0-1 秒誤差。
  • Redis 2.6+:0-1 毫秒誤差 (Unix 毫秒時間戳存儲)。

時間流逝不依賴實例運行狀態;系統時鐘必須同步,否則 RDB 遷移異機可能導致鍵載入即過期。

雙重淘汰機制

被動淘汰

客戶端訪問鍵時發現已過期 → 立即刪除。

主動淘汰 (每秒 10 次)

  1. 從過期鍵集隨機抽樣 20 個。
  2. 刪除其中已過期者。
  3. 若超過 25% 已過期,重複步驟 1。

概率保證:任意時刻佔用記憶體的已過期鍵 ≤ 每秒寫操作峰值 / 4。

主從與 AOF 同步語義

  • 主節點集中處理過期:鍵過期時合成 DEL 命令寫入 AOF 並同步至所有從節點。
  • 從節點不獨立淘汰,等待主節點 DEL;但會完整記錄過期狀態,升主後可獨立淘汰。

導航會話模式範例

記錄用戶最近 60 秒內訪問頁面:

MULTI
RPUSH pageviews:user:{uid} https://...
EXPIRE pageviews:user:{uid} 60
EXEC

閒置超過 60 秒自動清理,完美契合會話語義。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved