Redis支持多個數據庫,而且每一個數據庫的數據是隔離的不能共享,而且基於單機纔有,若是是集羣就沒有數據庫的概念。 Redis是一個字典結構的存儲服務器,而實際上一個Redis實例提供了多個用來存儲數據的字典,客戶端能夠指定將數據存儲在哪一個字典中。這與咱們熟知的在一個關係數據庫實例中能夠建立多個數據庫相似,因此能夠將其中的每一個字典都理解成一個獨立的數據庫。html
每一個數據庫對外都是一個從0開始的遞增數字命名,Redis默認支持16個數據庫(能夠經過配置文件支持更多,無上限),能夠經過配置databases來修改這一數字。客戶端與Redis創建鏈接後會自動選擇0號數據庫,不過能夠隨時使用SELECT命令更換數據庫,如要選擇1號數據庫:redis
redis> SELECT 1
OK
redis [1] > GET foo
(nil)
複製代碼
Redis 是一個鍵值對(key-value pair)數據庫服務器, 服務器中的每一個數據庫都由一個 redis.h/redisDb 結構表示, 其中, redisDb 結構的 dict 字典保存了數據庫中的全部鍵值對, 咱們將這個字典稱爲鍵空間(key space):數據庫
typedef struct redisDb {
// ...
// 數據庫鍵空間,保存着數據庫中的全部鍵值對
dict *dict;
// ...
} redisDb;
複製代碼
redisDb結構的expries字典保存了數據庫全部的鍵過時時間,咱們稱這個字典爲過時字典: 過時字典的鍵是一個指針,這個指針指向鍵空間中的某個鍵對象(也便是某個數據庫鍵)。 過時字典的值是一個 long類型的整數,這個整數保存餓鍵所指向的數據庫鍵的過時時間,一個毫秒精度的UNIX時間戳。看下圖是帶有過時的時間的存儲機構。其中過時字典的鍵實際上是一個指針,對應同一個內存存儲。數組
過時鍵的刪除策略是按期刪除策略+惰性刪除策略 惰性刪除的策略以下圖:bash
生成RDB文件,執行SAVE和BGSAVE命令時,程序會直接忽略過時的鍵。 載入RDD文件時 1.服務器以主服務器運行時,載入RDB會直接忽略過時的鍵 2.服務器以從服務器運行時,載入RDB不出來過時鍵,可是主同步的從服務器時,數據將 最終保存一致。 生成AOF文件時類型,AOF都是追加的命令,當過時時,會在AOF中追加DEL命令。當AOF重寫時,是以數據當時的狀態重寫,則過時的鍵會直接被忽略。 複製時,主服務器會主動刪除過時的數據,而後同步從服務器。從服務器只是讀取。服務器
詳情能夠看命令 重點:函數