Redis 數據庫(2) redis鍵過期策略

Redis有4個命令可以設置鍵的過期時間:

1. expire <key> <ttl> 設置key的生存時間爲ttl秒;

2. pexpire <key> <ttk> 設置key的生存時間爲ttl毫秒; 

3. expireat <key> <ts> 設置key的過期時間爲ts的秒數時間戳;

4. pexpireat <key> <ts> 設置key的過期時間爲ts的毫秒數時間戳;


實際上 expire, pexpire, expireat 3個命令都是使用pexpireat實現的,只需要轉換時間單位就行了。


redisDb結構中,有一個expires字典保存了所有key的過期時間,這個字典稱之爲過期字典。

typeof struct redisDb {

//...

dict *expires;

//...

} redisDb;


當一個key被設爲過期後,redisDb中鍵空間字典和過期字典中的鍵重複,並不會出現重複對象,2個key指向的都是同一個對象。


key過期刪除策略:

1.定時刪除:設置過期鍵的時候,創意一個定時器;

2.惰性刪除:放任過期鍵不管,每次訪問時,判斷是否過期,如過期則刪除;

3.定期刪除:每隔一段時間,redis會掃描過期鍵,發現過期則刪除;


Redis實際使用的是惰性刪除和定期刪除2種配合使用。

定期刪除函數執行步驟:

1.從一定量的數據庫中去除一定數量的隨機鍵檢查,刪除其中的過期鍵;

2.全局變量current_db會記錄當前函數檢查的進度,並在下一次調用時,接着上一次的進度處理。

3.隨着函數不斷被執行,所有過期鍵都會被檢查到,這時將current_db變量重置爲0,再開始新一輪的檢查。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章