Redis
文章平均质量分 64
小黄妖怪
这个作者很懒,什么都没留下…
展开
-
Redis底层数据结构-Dict
Redis的键与值的映射关系是通过Dict来实现的。Dict是由三部分组成,分别是哈希表(DictHashTable),哈希节点(DictEntry),字典(Dict)哈希表结构如下图所示:由于会发生哈希冲突,所以entry个数可能会大于sizesize总是2的n次方哈希节点的结构如下图所示:当我们向Dict添加键值对时,Redis首先根据key计算出hash值(h),然后利用h&sizemask(其实就是h对数组长度取余)计算元素应该存储到数组中哪个索引位置。原创 2024-04-03 18:50:42 · 653 阅读 · 0 评论 -
Redis底层数据结构-IntSet
其实数组本身只是一个指针,指向起始元素的地址,intset并不依赖于C语言提供的数组相关函数,所有增删改查都是自己来做的。,在本例子中升级编码为INTSET_ENC_INT32,每个整数占4字节,并按照新的编码方式以及元素个数扩容数组.IntSet是Redis中set集合的一种实现方式,基于整数数组来实现,并具备长度可变,有序等特征。由此,对这个数组的操作和大小并不是像表面看到的一样,而是由encoding来决定 的。倒序依次(先调整20,10,5)将数组中的元素拷贝到扩容后的正确位置。原创 2024-04-03 18:49:42 · 320 阅读 · 0 评论 -
Redis底层数据库之SDS
由于len是uint8_t类型,最大值为254,所以字符串最大长度为254(因为char buf[]仍然是C语言的字符串,会有一个结束符)Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是redis中最常用的一种数据结构。假如在该字符串追加一段”,AMY“,那么会去申请新空间(alloc为申请的存放字符的空间,不包含结束字符)所以Redis构建了一种新的字符串结构,成为简单动态字符串,简称SDS。flags:表示不同的结构体类型。uint8_t:表示无符号整型。原创 2024-04-02 20:24:30 · 489 阅读 · 0 评论