一、預先需要了解的知識
1、redis 中的每一個數(shù)據(jù)庫,都由一個 redisDb 的結(jié)構(gòu)存儲。其中,redisDb.id 存儲著 redis 數(shù)據(jù)庫以整數(shù)表示的號碼。redisDb.dict 存儲著該庫所有的鍵值對數(shù)據(jù)。redisDb.expires 保存著每一個鍵的過期時間。
2、當redis 服務器初始化時,會預先分配 16 個數(shù)據(jù)庫(該數(shù)量可以通過配置文件配置),所有數(shù)據(jù)庫保存到結(jié)構(gòu) redisServer 的一個成員 redisServer.db 數(shù)組中。當我們選擇數(shù)據(jù)庫 select number 時,程序直接通過 redisServer.db[number] 來切換數(shù)據(jù)庫。有時候當程序需要知道自己是在哪個數(shù)據(jù)庫時,直接讀取 redisDb.id 即可。
3、既然我們知道一個數(shù)據(jù)庫的所有鍵值都存儲在redisDb.dict中,那么我們要知道如果找到key的位置,就有必要了解一下dict 的結(jié)構(gòu)了:
// 特定于類型的處理函數(shù)
dictType *type;
// 類型處理函數(shù)的私有數(shù)據(jù)
void *privdata;
// 哈希表(2個)
dictht ht[2];
// 記錄 rehash 進度的標志,值為-1 表示 rehash 未進行
int rehashidx;
// 當前正在運作的安全迭代器數(shù)量
int iterators;
} dict;
新聞熱點
疑難解答
圖片精選