美文网首页
快速整明白Redis中的字典到底是个啥

快速整明白Redis中的字典到底是个啥

作者: 万猫学社 | 来源:发表于2022-04-17 15:22 被阅读0次

字典简介

字典是一种用于保存键值对的数据结构,可以通过键值对中的键快速地查找到对应的值。在Redis所使用的C语言中,并没有内置字典,所以Redis自己实现了字典。

整个Redis数据库的所有的键和值就组成了一个全局的字典,对数据库的增删改查操作都是构建在字典的操作之上的。

字典还是Redis的基本数据类型哈希(hash)的底层实现之一,当哈希数据类型的键和值的长度较大或者键值对数量较多的时候,Redis就会把字典作为哈希数据类型的底层实现。

字典还是Redis的基本数据类型有序集合(zset)的底层实现之一,当有序集合中的所有元素的成员长度较长或者元素个数较多的时候,Redis就会把跳跃表和哈希表作为有序集合的内部实现。

字典的实现

在Redis中的字典是由dict结构表示的,其底层实现使用了哈希表,一个哈希表包含多个哈希表结点,每一个哈希表结点都保存了字典中的一个键值对。下面我们一个一个地详细了解一下。

字典结构

字典是由dict结构表示的,它包含以下几个属性:

  • type属性:一个指向dictType结构的指针,每个dictType结构都保存了一套针对其特定类型键值对操作的函数。
  • privdata属性:保存了需要传给其特定类型函数的可选参数。
  • ht属性:一个包含两个项的数组,每一项都是一个哈希表。一般情况下,字典只使用第一个哈希表,只由在重新散列(rehash)的时候才会用到第二个哈希表。
  • rehashidx属性:用于记录重新散列(rehash)的进度,当没有重新散列(rehash)的时候,它的值为-1。

其中,type属性和privdata属性组合以后,就可以针对不同类型的键值对做不同的处理操作,比如:计算哈希值、复制键、复制值、对比键、销毁键、销毁值等等。

哈希表

哈希表使用dictht结构表示,它包含以下几个属性:

  • table属性:一个哈希表数组,数组中每个项都是指向哈希表结点的指针,每一个哈希表结点都保存了字典中的一个键值对。
  • size属性:哈希表的大小,也是就是哈希表数组(table)的大小。
  • sizemask属性:哈希表大小掩码,用于计算索引值,一直等于哈希表大小(size)-1。
  • used属性:哈希表中已有结点的数量。

哈希表结点

哈希表结点使用dictEntry结构表示,它包含以下几个属性:

  • key属性:用于保存键值对中的键。
  • v属性:用于保存键值对中的值。它可以是一个指针,也可以是一个uint64_t的整数,也可以是一个int64_t的整数。
  • next属性:一个指向下一个哈希表结点的指针。当发生键冲突的时候,它可以把多个哈希表结点连接起来,形成一个单向链表。

字典示例

说了这么多,都比较抽象不容易理解,我们来举个例子:

万猫学社

这就是一个字典的内部结构,其中有3个键值对,键分别是:万、猫、学社。

最后,谢谢你这么帅,还给我点赞关注

相关文章

  • 快速整明白Redis中的字典到底是个啥

    字典简介 字典是一种用于保存键值对的数据结构,可以通过键值对中的键快速地查找到对应的值。在Redis所使用的C语言...

  • 快速整明白Redis中的整数集合到底是个啥

    整数集合简介 整数集合(intset)是Redis集合数据类型的内部编码之一,当集合数据类型中的元素都是整数并且元...

  • 快速整透Redis中的压缩列表到底是个啥

    压缩列表简介 压缩列表(ziplist)是由一个连续内存组成的顺序型数据结构。一个压缩列表可以包含任意多个节点,每...

  • Redis中的字典

    Redis中的字典 Redis中的字典使用哈希表作为底层实现,一个哈希表中可以有多个哈希表结点,而每个哈希表结点保...

  • Redis 设计与实现 4:字典 dict

    Redis 中,字典是基础结构。Redis 数据库数据、过期时间、哈希类型都是把字典作为底层结构。 字典的结构 哈...

  • Redis的数据结构(三):字典

    字典在redis的应用 字典在我们平时的编程中是一种非常常见的数据结构,它有着结构简单,查找快速的优点,而在red...

  • Redis是如何判断数据是否过期的呢?

    Redis 通过一个叫做过期字典(可以看作是hash表)来保存数据过期的时间。过期字典的键指向Redis数据库中的...

  • Redis的渐进式hash

    redis的底层存储`` redis把所有的key都存储在一个大字典中,学过python的小伙伴应该就会知道字典这...

  • 工作中遇到的hashtable

    一.redis 中使用的字典 redis的字典是由hash表实现的,代码主要是在dict.cpp/dict.h中 ...

  • Redis 过期键删除策略

    Redis中的K-V pairs保存在一个字典中,这个字典叫做键空间。 键的过期时间被放在另外一个字典中,key指...

网友评论

      本文标题:快速整明白Redis中的字典到底是个啥

      本文链接:https://www.haomeiwen.com/subject/lgrlertx.html