redis設計與實現讀書筆記-數據庫

前言

鍵空間和用戶所見的數據庫是直接對應的:

❑鍵空間的鍵也就是數據庫的鍵,每個鍵都是一個字符串對象

❑鍵空間的值也就是數據庫的值,每個值可以是字符串對象、列表對象、哈希表對象、集合對象和有序集合對象中的任意一種Redis對象。

 

設置鍵的生存時間或過期時間

通過EXPIRE命令或者PEXPIRE命令,客戶端可以以秒或者毫秒精度爲數據庫中的某個鍵設置生存時間(Time To Live,TTL),在經過指定的秒數或者毫秒數之後,服務器就會自動刪除生存時間爲0的鍵:

❑EXPIRE<key><ttl>命令用於將鍵key的生存時間設置爲ttl秒。

❑PEXPIRE<key><ttl>命令用於將鍵key的生存時間設置爲ttl毫秒。

❑EXPIREAT<key><timestamp>命令用於將鍵key的過期時間設置爲timestamp所指定的秒數時間戳。

❑PEXPIREAT<key><timestamp>命令用於將鍵key的過期時間設置爲timestamp所指定的毫秒數時間戳。

redisDb結構的expires字典保存了數據庫中所有鍵的過期時間,我們稱這個字典爲過期字典:

過期鍵刪除策略

❑定時刪除:定時刪除策略對內存是最友好的,在設置鍵的過期時間的同時,創建一個定時器(timer),讓定時器在鍵的過期時間來臨時,立即執行對鍵的刪除操作。

❑惰性刪除:惰性刪除策略對CPU時間來說是最友好的,放任鍵過期不管,但是每次從鍵空間中獲取鍵時,都檢查取得的鍵是否過期,如果過期的話,就刪除該鍵;如果沒有過期,就返回該鍵。

❑定期刪除:每隔一段時間,程序就對數據庫進行一次檢查,刪除裏面的過期鍵。至於要刪除多少過期鍵,以及要檢查多少個數據庫,則由算法決定。

Redis服務器實際使用的是惰性刪除和定期刪除兩種策略:通過配合使用這兩種刪除策略,服務器可以很好地在合理使用CPU時間和避免浪費內存空間之間取得平衡。

AOF、RDB和複製功能對過期鍵的處理

生成RDB文件:

在執行SAVE命令或者BGSAVE命令創建一個新的RDB文件時,程序會對數據庫中的鍵進行檢查,已過期的鍵不會被保存到新創建的RDB文件中。

載入RDB文件:

❑如果服務器以主服務器模式運行,那麼在載入RDB文件時,程序會對文件中保存的鍵進行檢查,未過期的鍵會被載入到數據庫中,而過期鍵則會被忽略,所以過期鍵對載入RDB文件的主服務器不會造成影響。

❑如果服務器以從服務器模式運行,那麼在載入RDB文件時,文件中保存的所有鍵,不論是否過期,都會被載入到數據庫中。不過,因爲主從服務器在進行數據同步的時候,從服務器的數據庫就會被清空,所以一般來講,過期鍵對載入RDB文件的從服務器也不會造成影響。

 AOF文件寫入:

和生成RDB文件時類似,在執行AOF重寫的過程中,程序會對數據庫中的鍵進行檢查,已過期的鍵不會被保存到重寫後的AOF文件中。

 

 

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