W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
字典, 又稱符號(hào)表(symbol table)、關(guān)聯(lián)數(shù)組(associative array)或者映射(map), 是一種用于保存鍵值對(duì)(key-value pair)的抽象數(shù)據(jù)結(jié)構(gòu)。
在字典中, 一個(gè)鍵(key)可以和一個(gè)值(value)進(jìn)行關(guān)聯(lián)(或者說(shuō)將鍵映射為值), 這些關(guān)聯(lián)的鍵和值就被稱為鍵值對(duì)。
字典中的每個(gè)鍵都是獨(dú)一無(wú)二的, 程序可以在字典中根據(jù)鍵查找與之關(guān)聯(lián)的值, 或者通過(guò)鍵來(lái)更新值, 又或者根據(jù)鍵來(lái)刪除整個(gè)鍵值對(duì), 等等。
字典經(jīng)常作為一種數(shù)據(jù)結(jié)構(gòu)內(nèi)置在很多高級(jí)編程語(yǔ)言里面, 但 Redis 所使用的 C 語(yǔ)言并沒(méi)有內(nèi)置這種數(shù)據(jù)結(jié)構(gòu), 因此 Redis 構(gòu)建了自己的字典實(shí)現(xiàn)。
字典在 Redis 中的應(yīng)用相當(dāng)廣泛, 比如 Redis 的數(shù)據(jù)庫(kù)就是使用字典來(lái)作為底層實(shí)現(xiàn)的, 對(duì)數(shù)據(jù)庫(kù)的增、刪、查、改操作也是構(gòu)建在對(duì)字典的操作之上的。
舉個(gè)例子, 當(dāng)我們執(zhí)行命令:
redis> SET msg "hello world"
OK
在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)鍵為?"msg"
?, 值為?"hello?world"
?的鍵值對(duì)時(shí), 這個(gè)鍵值對(duì)就是保存在代表數(shù)據(jù)庫(kù)的字典里面的。
除了用來(lái)表示數(shù)據(jù)庫(kù)之外, 字典還是哈希鍵的底層實(shí)現(xiàn)之一: 當(dāng)一個(gè)哈希鍵包含的鍵值對(duì)比較多, 又或者鍵值對(duì)中的元素都是比較長(zhǎng)的字符串時(shí), Redis 就會(huì)使用字典作為哈希鍵的底層實(shí)現(xiàn)。
舉個(gè)例子,?website
?是一個(gè)包含?10086
?個(gè)鍵值對(duì)的哈希鍵, 這個(gè)哈希鍵的鍵都是一些數(shù)據(jù)庫(kù)的名字, 而鍵的值就是數(shù)據(jù)庫(kù)的主頁(yè)網(wǎng)址:
redis> HLEN website
(integer) 10086
redis> HGETALL website
1) "Redis"
2) "Redis.io"
3) "MariaDB"
4) "MariaDB.org"
5) "MongoDB"
6) "MongoDB.org"
# ...
website
?鍵的底層實(shí)現(xiàn)就是一個(gè)字典, 字典中包含了?10086
?個(gè)鍵值對(duì):
"Redis"
?, 值為?"Redis.io"
?。"MariaDB"
?, 值為?"MariaDB.org"
?;"MongoDB"
?, 值為?"MongoDB.org"
?;諸如此類。
除了用來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)和哈希鍵之外, Redis 的不少功能也用到了字典, 在后續(xù)的章節(jié)中會(huì)不斷地看到字典在 Redis 中的各種不同應(yīng)用。
本章接下來(lái)的內(nèi)容將對(duì) Redis 的字典實(shí)現(xiàn)進(jìn)行詳細(xì)的介紹, 并列出字典的操作 API 。
本章不會(huì)對(duì)字典的基本定義和基礎(chǔ)算法進(jìn)行介紹, 如果有需要的話, 可以參考以下這些資料:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: