字典,又称为符号表、关联数组或映射,是一种用于保存键值对的抽象数据结构。在字典中,一个键可以和一个值进行关联,这些关联的键和值称为键值对。键值对中键是
唯一的
,我们可以根据键key
通过映射查找或者更新对应的值value
。
很多高级开发语言有对应集合支持字典这种数据结构,比如Java
中的Map
集合。C语言
并未内置字典这种数据结构,Redis
构建了自己的字典实现。
应用
字典在Redis
中应用非常广泛,Redis
数据库就是使用字典作为数据底层的实现。对数据的增、删、改、查操作也是建立在字典之上操作。
当执行命令:
set msg "hello"
在数据库中创建一个键为 msg
,值为 hello
的键值对,这个键值对
就用字典来实现的。创建其他数据类型的键值对,比如list
、hash
、set
、sort set
也是用字典来实现的。
处理用来表示数据中的键值对,字典还是hash
数据类型底层实现之一,比如一个hash
数据类型website
,包含100
个键值对,这些键值对中的键是网址名称
,值是网页地址
:
redis> HGETALL website
1)"Redis"
2)"Redis.io"
3)"nacos"
4)"nacos.io"
.....
website
键的底层就是一个字典,包好了100
个键值对
,例如:
- 键值对中的键为
"Redis"
,值为"Redis.io"
。 - 键值对中的键为
"nacos"
,值为"nacos.io"
。
字典的实现
Redis
字典使用哈希表作为底层实现,一个哈希表里面有多个哈希表节点,每个哈希表节点保存字典中的键值对。
哈希表
Redis
字典使用的哈希表由 dict.h/dictht 结构来表示:
/* This is our hash table structure. Every dictionary has two of this as we
* implement incremental r