7.3-鍵值對數(shù)據(jù)庫-2_第1頁
7.3-鍵值對數(shù)據(jù)庫-2_第2頁
7.3-鍵值對數(shù)據(jù)庫-2_第3頁
7.3-鍵值對數(shù)據(jù)庫-2_第4頁
7.3-鍵值對數(shù)據(jù)庫-2_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、7.3 鍵值對數(shù)據(jù)庫Redis數(shù)據(jù)庫結(jié)構(gòu)Redis數(shù)據(jù)庫的實(shí)現(xiàn)原理【本節(jié)學(xué)習(xí)目標(biāo)】一、Redis的數(shù)據(jù)庫結(jié)構(gòu)存儲效率(memory) Redis內(nèi)部維護(hù)一個(gè)db數(shù)組,每個(gè)db都是一個(gè)數(shù)據(jù)庫,默認(rèn)16個(gè)數(shù)據(jù)庫。用select命令來切換數(shù)據(jù)庫。(efficiency)的考慮,壓縮數(shù)據(jù)、減少內(nèi)存碎片等問題; 快速響應(yīng)時(shí)間(fast response time)與高吞吐量(high throughput)的折中方案; 單線程(single-threaded): 簡化數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)現(xiàn),通過異步IO和pipelining等機(jī)制來實(shí)現(xiàn)高速的并發(fā)訪問1. 數(shù)據(jù)庫數(shù)組服務(wù)器中的數(shù)據(jù)庫,redis.h/red

2、isServer結(jié)構(gòu)的db數(shù)組中,每個(gè)redisDb結(jié)構(gòu)就代表一個(gè)數(shù)據(jù)庫。struct redisServer . / 一個(gè)保存著redisDb的數(shù)組,db中的每一項(xiàng)就是一個(gè)數(shù)據(jù)庫 redisDb *db; . 每個(gè)數(shù)據(jù)庫由一個(gè)redisDb結(jié)構(gòu)表示,其中redisDb結(jié)構(gòu)中的字典dict保存了數(shù)據(jù)庫中所有的鍵值對。 redisDB結(jié)構(gòu)體的定義:typedef struct redisDb . /保存數(shù)據(jù)庫中所有的鍵值對 dict *dict; .Redis中的字典dict, 又稱為符號表、關(guān)聯(lián)數(shù)組或映射,是一種用于保存鍵值對的抽象數(shù)據(jù)結(jié)構(gòu); 字典中的每個(gè)鍵是獨(dú)一無二的2. 字典結(jié)構(gòu)每個(gè)數(shù)據(jù)庫

3、由一個(gè)redisDb結(jié)構(gòu)表示,其中redisDb結(jié)構(gòu)中的字典dict保存了數(shù)據(jù)庫中所有的鍵值對。 redisDB結(jié)構(gòu)體的定義:typedef struct redisDb . /保存數(shù)據(jù)庫中所有的鍵值對 dict *dict; .Redis中的字典dict, 又稱為符號表、關(guān)聯(lián)數(shù)組或映射,是一種用于保存鍵值對的抽象數(shù)據(jù)結(jié)構(gòu); 字典中的每個(gè)鍵是獨(dú)一無二的。typedef struct dict dictht ht2; int rehashidx; int iterators; dict; typedef struct dicht dicEntry * table; unsigned long s

4、ize; unsigned long sizemark; unsigned long used; dictht;typedef struct dicEntry void *key; / 鍵 union void *val; uint64_tu64; int64_ts64; v; struct dicEntry *next; dictEntry;字典結(jié)構(gòu)圖示字典層次結(jié)構(gòu)3 Rehash過程過程:創(chuàng)建一個(gè)新的哈希表,大小是當(dāng)前的兩倍(準(zhǔn)確說還必須是2的冪次),然后把全部鍵值對重新散列到新的哈希表中,最后再用它替換原來的哈希表;rehash問題:具體過程如下:1). 在ht1上分配一個(gè)更大的哈希表;

5、2). “分多次”把ht0上的鍵值對重新散列到ht1上;3). 當(dāng)處理完所有鍵值對時(shí),讓ht0指向新的哈希表;4. 對象結(jié)構(gòu)redisObject對象來表示所有的key和value。對象結(jié)構(gòu)特點(diǎn)對象的編碼對象空轉(zhuǎn)時(shí)長, 空轉(zhuǎn)時(shí)長較高的那部分鍵會優(yōu)先被Redis釋放,從而回收內(nèi)存。內(nèi)存回收: 當(dāng)一個(gè)對象的引用計(jì)數(shù)為0時(shí),釋放該對象內(nèi)存資源。對象共享: 對象的應(yīng)用計(jì)數(shù)另外一個(gè)功能就是對象的共享,當(dāng)一個(gè)對象被另外一個(gè)地方使用時(shí),可以直接在該對象引用計(jì)數(shù)上+就行。注意:Redis只對包含整數(shù)值的字符串對象進(jìn)行共享二、Redis鍵值數(shù)據(jù)庫的實(shí)現(xiàn)原理-原則數(shù)據(jù)庫的操作、集群的設(shè)置簡單, Redis內(nèi)部維護(hù)

6、一個(gè)db數(shù)組,每個(gè)db都是一個(gè)數(shù)據(jù)庫,默認(rèn)16個(gè)數(shù)據(jù)庫。用select命令來切換數(shù)據(jù)庫。存儲效率(memory efficiency)的考慮,可壓縮數(shù)據(jù)、減少內(nèi)存碎片、高速緩存和外存的數(shù)據(jù)交換算法等問題;快速響應(yīng)時(shí)間(fast response time)與高吞吐量(high throughput)的折中方案;單線程(single-threaded): 簡化數(shù)據(jù)結(jié)構(gòu)和算法的實(shí)現(xiàn),通過異步IO和pipelining等機(jī)制來實(shí)現(xiàn)高速的并發(fā)訪問。 1. 鍵空間管理通過字典保存了數(shù)據(jù)庫中的所有鍵值對,字典稱為鍵空間。鍵空間的每個(gè)鍵都是一個(gè)字符串對象,鍵空間的值也就是數(shù)據(jù)庫的值,可以是字符串對象,列表對

7、象,哈希表對象,集合對象,有序集合對象中的任何一種。添加新鍵、刪除鍵、更新鍵、更新鍵、查找鍵讀取一個(gè)鍵后,服務(wù)器會更新鍵的最近讀取時(shí)間(LRU)時(shí)間,用于計(jì)算鍵的閑置時(shí)間。如果服務(wù)器在讀取一個(gè)鍵時(shí)發(fā)現(xiàn)該鍵已經(jīng)2. 設(shè)置生存時(shí)間和過期時(shí)間用expire命令或者pexpire命令可以對一個(gè)鍵設(shè)置生存時(shí)間, 自動(dòng)刪除生存時(shí)間為0的鍵。四個(gè)命令expire, pexpire, expireat, pexpireat。過期字典記錄所有帶過期時(shí)間的鍵程序可以通過過期字典檢查一個(gè)給定鍵是否過期,檢查給定鍵是否存在有過期字典并對該鍵是否過期進(jìn)行判斷3. 過期鍵刪除策略系統(tǒng)提供三種刪除策略刪除過期鍵。 定時(shí)刪除: 定時(shí)器控制。惰性刪除:當(dāng)獲取鍵時(shí)檢查鍵是否過期,過期就刪除。定期刪除:每隔一段時(shí)間,程序就對數(shù)據(jù)庫進(jìn)行一次檢查,刪除過期鍵4. 復(fù)制功能 Redis復(fù)制主要包括RDB復(fù)制和AOF復(fù)制,RDB快照方式,AOF通過將發(fā)送到服務(wù)器的寫操作命令記錄下來,形成AOF文件。在RDB復(fù)制中,每次執(zhí)行特定的命令(SAVE或BGSAVE)時(shí)創(chuàng)建一個(gè)新的RDB文件時(shí),過期的鍵不保存到新創(chuàng)建的R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論