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