欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Redis的Key是如何尋址的

這篇文章主要介紹“redis的Key是如何尋址的”,在日常操作中,相信很多人在Redis的Key是如何尋址的問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Redis的Key是如何尋址的”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)公司2013年開(kāi)創(chuàng)至今,先為鐘山等服務(wù)建站,鐘山等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為鐘山企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

Redis 服務(wù)器在初始化時(shí),默認(rèn)的會(huì)預(yù)先分配 16 個(gè)數(shù)據(jù)庫(kù)。這其中的每一個(gè)數(shù)據(jù)庫(kù),都由一個(gè) redisDb 的結(jié)構(gòu)存儲(chǔ)。redisDb 的結(jié)構(gòu)中有兩個(gè)重要的部分:

  1. redisDb.id:存儲(chǔ)著 redis 數(shù)據(jù)庫(kù)以整數(shù)表示的號(hào)碼。

  2. redisDb.dict:存儲(chǔ)著該庫(kù)所有的鍵值對(duì)數(shù)據(jù)。

  3. redisDb.expires:保存著每一個(gè)鍵的過(guò)期時(shí)間。

針對(duì) Redis 中的眾多數(shù)據(jù)庫(kù),當(dāng)我們使用 select number 選擇數(shù)據(jù)庫(kù)時(shí),程序可以直接通過(guò) redisServer.db[number] 來(lái)切換數(shù)據(jù)庫(kù)。有時(shí)候當(dāng)程序需要知道自己是在哪個(gè)數(shù)據(jù)庫(kù)時(shí),也可以直接通過(guò)讀取 redisDb.id 即可。

Redis 的字典使用哈希表作為其底層實(shí)現(xiàn)。dict 類型使用的兩個(gè)指向哈希表的指針,其中 0 號(hào)哈希表(ht[0])主要用于存儲(chǔ)數(shù)據(jù)庫(kù)的所有鍵值,而 1 號(hào)哈希表主要用于程序?qū)?0 號(hào)哈希表進(jìn)行 rehash 時(shí)使用,rehash 一般是在添加新值時(shí)會(huì)觸發(fā),這里不做過(guò)多的贅述。所以 redis 中查找一個(gè) key,其實(shí)就是對(duì)進(jìn)行該 dict 結(jié)構(gòu)中的 ht[0] 進(jìn)行查找操作。

既然是哈希,那么我們知道就會(huì)有哈希碰撞,那么當(dāng)多個(gè)鍵哈希之后為同一個(gè)值怎么辦呢?redis 采取鏈表的方式來(lái)存儲(chǔ)多個(gè)哈希碰撞的鍵。也就是說(shuō),當(dāng)根據(jù) key 的哈希值找到該列表后,如果列表的長(zhǎng)度大于 1,那么我們需要遍歷該鏈表來(lái)找到我們所查找的 key。當(dāng)然,一般情況下鏈表長(zhǎng)度都為是 1,所以時(shí)間復(fù)雜度可看作 o(1)。

根據(jù)上面的解釋,以及官方文檔和源碼解毒。我們可以得出,Redis 的 Key 尋址包含一下步驟:

  1. 當(dāng)拿到一個(gè) key 后,redis 先判斷當(dāng)前庫(kù)的 0 號(hào)哈希表是否為空,即:if (dict->ht[0].size == 0)。如果為 true 直接返回 NULL。

  2. 判斷該 0 號(hào)哈希表是否需要 rehash,因?yàn)槿绻谶M(jìn)行 rehash,那么兩個(gè)表中都有可能存儲(chǔ)該 key。如果正在進(jìn)行 rehash,將調(diào)用一次_dictRehashStep 方法,_dictRehashStep 用于對(duì)數(shù)據(jù)庫(kù)字典、以及哈希鍵的字典進(jìn)行被動(dòng) rehash。

  3. 計(jì)算哈希表,根據(jù)當(dāng)前字典與 key 進(jìn)行哈希值的計(jì)算。

  4. 根據(jù)哈希值與當(dāng)前字典計(jì)算哈希表的索引值。

  5. 根據(jù)索引值在哈希表中取出鏈表,遍歷該鏈表找到 key 的位置。一般情況,該鏈表長(zhǎng)度為 1。

  6. 當(dāng) ht[0] 查找完了之后,再進(jìn)行了次 rehash 判斷,如果未在 rehashing,則直接結(jié)束,否則對(duì) ht[1]重復(fù) 345 步驟。

如果是 Redis 集群模式,則需要先判斷 key 在哪一個(gè)節(jié)點(diǎn)上。

Redis的Key是如何尋址的    

到此,關(guān)于“Redis的Key是如何尋址的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

新聞名稱:Redis的Key是如何尋址的
本文路徑:http://chinadenli.net/article24/gojdce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)自適應(yīng)網(wǎng)站App設(shè)計(jì)域名注冊(cè)微信小程序定制開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁(yè)設(shè)計(jì)公司