Redis
文章平均质量分 81
xkzeee
这个作者很懒,什么都没留下…
展开
-
Redis SkipList(跳表)底层原理详解
SkipList(跳表)是一种有序的数据结构,它通过在每个节点中维持多个指向其他节点的指针,然后达到快速访问节点的目的,它的节点查找的复杂度为平均 O(logN)、最坏O(N),还能通过顺序性的操作来批量处理节点。SkipList的本质还是链表,但是它与传统的链表还是有区别的。跳表元素是按照升序排列存储的跳表查询性能要比链表好:链表:当元素很多时并且要访问中间某个元素,那么查询效率会非常慢,因为链表它的指针跨度为1,查询是一个一个往后查询的跳表:节点中可能包含多个指针,指针跨度比链表大,这样查询效率就快原创 2022-07-07 17:52:57 · 602 阅读 · 0 评论 -
Redis QuickList底层原理详解
QuickList 是针对 ZipList 在设计上的不足而新增的一种数据结构,对 ZipList 数据结构比较陌生的同学可以先学习一下 ZipList 在来学习。如果要存储大量数据,超出了 ZipList 最佳的上限,那么可以创建多个 ZipList 来分片存储数据,这多个 ZipList 如何建立联系?QuickList数据结构是Redis在3.2版本引入的一种新得数据结构,他是一个双端链表,链表中的每个节点都是一个 ZipList,如下图所示在这里插入图片描述怎么限制每个 ZipKList 的长度原创 2022-07-07 14:41:01 · 499 阅读 · 0 评论 -
Redis Dict底层原理详解
Dict由三部分组成:哈希表(DictHashTable)、哈希节点(DIctEntry)、字典(Dict)Redis 的 Dict 使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。接下来我们来介绍一下它们的实现DictHashTableDictEntry如果出现hash冲突,这里采用头插法,将冲突的数据插入表头 next指向被插的节点,因为Redis是单线程,所以不会出现循环链表DictDict在Redis中要用到的场景非常多,不同场景下的h原创 2022-07-05 20:32:56 · 310 阅读 · 0 评论 -
Redis 动态字符串(SDS)底层原理详解
Redis数据库中的每个键值对都是由对象组成的,其中:本篇文章将对以上提到的五种不同类型的对象进行介绍,刨析这些对象所使用的底层数据结构,并说明这些数据结构是如何深刻的影响对象的功能和性能的Redis没有直接使用C语言传统的字符串表示,而是自己构建了一种名为简单动态字符串的抽象类型,并将SDS用作Redis的默认字符串表示例如那么Redis将创建一个新的键值对,其中:除了用来保存数据库中的字符串值之外,SDS还被用作缓冲区 ( buffer ):AOF模块中的AOF缓冲区,以及客户端状态中的输入缓冲区,都原创 2022-07-05 20:29:27 · 1832 阅读 · 0 评论