当前位置: 首页 > 后端技术 > Java

快速了解什么是Redis中的字典

时间:2023-04-01 15:04:32 Java

字典介绍字典是一种用来存储键值对的数据结构,通过键值对中的键可以快速找到对应的值。在Redis使用的C语言中,没有内置字典,所以Redis自己实现了字典。整个Redis数据库的所有键和值组成了一个全局字典,数据库的增删改查操作都建立在对字典的操作之上。字典也是Redis的基本数据类型散列(hash)的底层实现之一。当哈希数据类型的键和值的长度很大或者键值对的数量很多时,Redis会使用字典作为哈希数据类型的底层实现。字典也是Redis基本数据类型有序集(zset)的底层实现之一。当有序集合中的所有元素的成员长度都比较长或者元素数量较多时,Redis会使用跳表和哈希表在内部实现为有序集合。字典的实现Redis中的字典是用dict结构来表示的,其底层实现使用的是哈希表。一个哈希表包含多个哈希表节点,每个哈希表节点存储字典中的数据。键值对。让我们一一仔细看看。DictionaryStructure字典用dict结构体表示,dict结构体包含以下属性:type属性:指向dictType结构体的指针,每个dictType结构体存储一组函数,用于其特定类型的键值对操作。privdata属性:保存了需要传递给其特定类型函数的可选参数。ht属性:一个包含两项的数组,每项是一个哈希表。一般来说,字典只使用第一个哈希表,在重新哈希(rehash)时只使用第二个哈希表。rehashidx属性:用于记录重新哈希(rehash)的进度,当没有重新哈希(rehash)时,其值为-1。其中type属性和privdata属性组合后,可以对不同类型的键值对进行不同的处理操作,如:计算hash值、复制key、复制value、比较key、销毁key、销毁value,等哈希表哈希表用dictht结构表示,包含如下属性:table属性:哈希表的数组,数组中的每一项都是指向哈希表节点的指针,哈希表都在字典中存储了一个键值对。size属性:哈希表的大小,也就是哈希表数组(表)的大小。sizemask属性:哈希表的大小掩码,用于计算索引值,始终等于哈希表的大小(size)-1。used属性:哈希表中现有节点的数量。哈希表节点哈希表节点由dictEntry结构体表示,包含如下属性:key属性:用于保存键值对中的键。v属性:用于保存键值对中的值。可以是一个指针,一个uint64_t的整数,或者一个int64_t的整数。next属性:指向下一个哈希表节点的指针。当发生键冲突时,它可以将多个哈希表节点连接起来,形成一个单向链表。字典例子说了这么多,但是比较抽象,不好理解。举个例子:这是一个字典的内部结构,里面有3个键值对,键分别是:Wan、Mao、Xueshe。最后,谢谢你这么帅,给我点赞和关注。