亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Redis?鍵值對(key-value)數(shù)據(jù)庫實現(xiàn)方法

 更新時間:2024年05月31日 14:38:20   作者:YoungSoulwt  
Redis 的鍵值對中的 key 就是字符串對象,而 value 可以是字符串對象,也可以是集合數(shù)據(jù)類型的對象,比如 List 對象,Hash 對象、Set 對象和 Zset 對象,這篇文章主要介紹了Redis?鍵值對數(shù)據(jù)庫是怎么實現(xiàn)的,需要的朋友可以參考下

在開始將數(shù)據(jù)結(jié)構(gòu)之前,先給介紹下 Redis 是怎樣實現(xiàn)鍵值對(key-value)數(shù)據(jù)庫的。

Redis 的鍵值對中的 key 就是字符串對象,而 value 可以是字符串對象,也可以是集合數(shù)據(jù)類型的對象,比如 List 對象,Hash 對象、Set 對象和 Zset 對象。

比如說:

> SET name "a"
OK
?
> HSET person name "a" age 18
?
>RPUSH stu "a" "b"
(integer) 4

這些命令代表著:

  • 第一條命令:name 是一個字符串鍵,因為鍵的值是一個字符串對象。
  • 第二條命令:person 是一個哈希表鍵,因為鍵的值是一個包含兩個鍵值對的哈希表對象。
  • 第三條命令:stu 是一個列表鍵,因為鍵的值是一個包含兩個元素的列表對象。

這些鍵值對是如何保存在 Redis 中的呢?

Redis 是使用了一個【哈希表】保存所有鍵值對,哈希表的最大好處就是讓我們可以用 O(1) 的時間復雜度來快速查找鍵值對。哈希表其實就是一個數(shù)組,數(shù)組中的元素叫做哈希桶。

Redis 的哈希桶是怎么保存鍵值對數(shù)據(jù)的呢?

哈希桶存放的是指向鍵值對數(shù)據(jù)的指針(dictEntry*),這樣通過指針就能找到鍵值對數(shù)據(jù),然后因為鍵值對的值可以保存字符串對象和集合數(shù)據(jù)類型的對象,所以鍵值對的數(shù)據(jù)結(jié)構(gòu)并不是直接保存值本身,而是保存了 void * key 和 void * value 指針,分別指向了實際的鍵對象和值對象,這樣一來,即使值是集合數(shù)據(jù),也可以通過 void * value 指針找到。

這里大概說下圖中涉及到的數(shù)據(jù)結(jié)構(gòu)的名字和用途:

  • redisDb 結(jié)構(gòu),表示 Redis 數(shù)據(jù)庫的結(jié)構(gòu),結(jié)構(gòu)體里存放了指向了 dict 結(jié)構(gòu)的指針;
  • dict 結(jié)構(gòu),結(jié)構(gòu)體里存放了 2 個哈希表,正常情況下都是用【哈希表1】,【哈希表2】只有在 rehash 的時候才用,具體什么是 rehash,會在哈希表數(shù)據(jù)結(jié)構(gòu)中說明;
  • dicttht 結(jié)構(gòu),表示哈希表的結(jié)構(gòu),結(jié)構(gòu)里存放了哈希表數(shù)組,數(shù)組中的每個元素都是指向一個哈希表節(jié)點結(jié)構(gòu)(dictEntry)的指針;
  • dictEntry 結(jié)構(gòu),表示哈希表節(jié)點的結(jié)構(gòu),結(jié)構(gòu)里存放了 void * key 和 void * value 指針,key 指向的是 String 對象,而 value 則可以指向 String 對象,也可以指向集合類型的對象,比如 List 對象、Hash 對象、Set 對象和 Zset 對象。

特別說明下,void * key 和 void * value 指針指向的是 Redis 對象,Redis 中的每個對象都由 redisObject 結(jié)構(gòu)表示,如下:

對象結(jié)構(gòu)里包含的成員變量:

  • type:標識該對象是什么類型的對象(String 對象、List 對象、Hash 對象、Set 對象和 Zset 對象);
  • encoding:標識該對象使用了哪種底層的數(shù)據(jù)結(jié)構(gòu);
  • ptr,指向底層數(shù)據(jù)結(jié)構(gòu)的指針。

Redis 對象和數(shù)據(jù)結(jié)構(gòu)的關(guān)系如下:

到此這篇關(guān)于Redis 鍵值對數(shù)據(jù)庫是怎么實現(xiàn)的的文章就介紹到這了,更多相關(guān)Redis 鍵值對數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論