redis当中的list的话是一个双向链表,其结构如下所示typedef struct listNode { struct listNode *prev; struct listNode *next; void *value;} listNode;typedef struct list { listNod……继续阅读 » 海叔叔 4年前 (2021-09-01) 57浏览 0评论0个赞
前文提到了一个adlist,它的注释是这样写的“A generic doubly linked list implementation”,这次要说的ziplist,它的注释是这样写的/* The ziplist is a specially encoded dually linked list that is designed * to be very……继续阅读 » 海叔叔 4年前 (2021-09-01) 52浏览 0评论0个赞
说实话,当我看见这两个文件的时候,内心深处的想法是崩溃的(哦谢特麻惹法克),你说你一个redis搞那么多list干啥。。。但是当我看到它的注释的时候,心里稍微好受了一点/* quicklist.c - A doubly linked list of ziplists */真香!!!貌似这东西是一个双向链表,而链表的每个元素就是之前介绍过的zipl……继续阅读 » 海叔叔 4年前 (2021-09-01) 41浏览 0评论0个赞
个人觉得zipmap之于dict,就相当于ziplist之于adlist。好了,闲话少说,先看注释/* String -> String Map data structure optimized for size. * This file implements a data structure mapping strings to other s……继续阅读 » 海叔叔 4年前 (2021-09-01) 22浏览 0评论0个赞
今天来讲讲redis当中set的一种实现形式intset,顾名思义,其应用场景只是在集合当中只包含整数值并且元素数量不多时,set才会采用的一种实现方式。其存储结构如下所示:typedef struct intset { uint32_t encoding; // 编码规则,具体见下面三个宏定义 uint32_t length; ……继续阅读 » 海叔叔 4年前 (2021-09-01) 27浏览 0评论0个赞
作为zset的底层实现之一(另一个是dict),今天来扯扯zskiplist(跳跃表)这个东西,至于zset是怎么利用这两个东西的,咱们之后再表,这次只是说说跳跃表的实现。跳跃表是一种有序的数据结构,它通过在每个节点中存放多个指向其他节点的指针(正向的指针>=1个,反向的指针就一个)来达到快速访问节点的目的。在redis当中,其代码定义如下:typ……继续阅读 » 海叔叔 4年前 (2021-09-01) 43浏览 0评论0个赞
hyperloglog是redis用来实现基值估算的。/* hyperloglog.c - Redis HyperLogLog probabilistic cardinality approximation.这边理解就要分两头了概念解释基值学过数学的朋友们都应该对这个概念不陌生吧,就是一个集合当中包含的不同元素的个数估算估算……继续阅读 » 海叔叔 4年前 (2021-08-31) 41浏览 0评论1个赞
5. 有序集合和散列存储着键值对的映射类似,有序集合也存储着成员与分值之间的映射,并且提供了分值处理命令,以及根据分值大小有序地获取或扫描成员的分值的命令。基础命令命令用例和描述ZADDZADD key-name score member [score member …]——将带有一定分值的成员添加到有序集合里面ZRE……继续阅读 » 海叔叔 4年前 (2021-08-31) 57浏览 0评论0个赞
之前写了些比较底层的东西,马上就要写redis当中是如何使用这些底层来实现数据结构的,突然之间想到,应该先简单介绍下各个数据结构的命令,之后再进行实现的分析,如果读者已经对redis命令很熟悉了,就不需要再继续往下看了,等下一篇出来直接看就行了~~~1. 字符串在redis里面字符串可以存储:1)字节串;2)整数;3)浮点数。其中整数的取值范围和系统的长……继续阅读 » 海叔叔 4年前 (2021-08-31) 36浏览 0评论0个赞
之前写了redis当中的底部实现以及几种类型的简单命令,今天来聊一聊redis当中的对象模型~~redis为每种外部可以访问到的数据结构提供了一个叫做对象类型的抽象,其底层实现是基于之前咱们讲过的adlist,ziplist等等那一堆,其对外隐藏了这些细节转而实现大家都知道的在文档当中介绍的命令。其实,在我们在redis当中创建某个数据类型的时候,redi……继续阅读 » 海叔叔 4年前 (2021-08-31) 31浏览 0评论0个赞