Redis數據庫的概念


1、Redis服務器默認會創建16個數據庫,存儲在數組中。

 

2、每個Redis客戶端都有自己的目標數據庫,默認情況下客戶端的目標數據庫為0號數據庫,可以通過執行SELECT命令來切換目標數據庫。

 

3、數據庫的內部結構

(1)數據庫由redisDb結構表示,主要由dictexpires兩個字典構成,dict字典負責保存鍵值對,expires字典則負責保存鍵的過期時間。

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

(3)數據庫常見操作有添加、刪除、更新、取值、FLUSHDB(清空數據庫)、RANDOMKEY(隨機返回一個鍵)、DBSIZE(返回數據庫鍵數量)。

 

4、鍵的生存時間和過期時間

(1)EXPIRE(秒)/PEXPIRE(毫秒):以秒或者毫秒精度為數據庫中的某個鍵設置生存時間(TTL)

(2)EXPIREAT(秒)/PEXPIREAT(毫秒):以秒或者毫秒精度為數據庫的某個鍵設置過期時間(UNIX時間戳)

(3)TTL/PTTL命令接受一個帶有生存時間或者過期時間的鍵,返回這個鍵的剩余生存時間(秒/毫秒)。鍵不存在返回-2,鍵沒有設置過期時間返回-1。

(4)EXPIRE、PEXPIRE和EXPIREAT三個命令都會轉換成PEXPIREAT命令來執行。

(5)redisDb結構的expires字典保存了數據庫中所有鍵的過期時間,我們稱為過期字典。過期字典的鍵是某個鍵對象,值是一個long類型的整數(毫秒精度的過期時間)。

(6)PERSIST是PRXPIREAT命令的反操作,用來移除過期時間。

 

5、Redis的過期鍵刪除策略

(1)惰性刪除策略:所有讀寫數據庫的Redis命令在執行之前都會調用expireIfNeed函數對輸入鍵進行檢查,如果鍵已過期則將鍵刪除。

(2)定期刪除策略:周期性函數serverCron執行時,activeExpireCycle函數每次隨機從一定量的數據庫中取出一定數量的鍵進行檢查,並刪除其中的過期鍵。定時循環執行,直到服務器中的所有數據庫都被檢查一遍。

(3)在執行SAVE或者BGSAVE命令創建一個新的RDB文件時,已過期的鍵不會保存,載入RDB文件時主服務器會過濾已過期的鍵,從服務器不會過濾,但是數據同步的時候從服務器數據會被清空,所以過期鍵不會對載入有影響。

(4)在執行BGREWRITEAOF命令重寫一個AOF文件時,不會包含已過期的鍵,在過期鍵被惰性刪除或者定期刪除之后,程序會向AOF文件追加一條DEL命令,來顯示地記錄該鍵已被刪除。

(5)當服務器運行在復制模式下時,從服務器的過期鍵刪除動作由主服務器控制,只有在接到主服務器發來的DEL命令之后,從服務器才會刪除過期鍵,這樣可以保證主從服務器數據的一致性

 

6、當Redis命令對數據庫進行修改之后,服務器會根據配置向客戶端發送數據庫通知。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM