![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
nanchengyu
这个作者很懒,什么都没留下…
展开
-
Redis 的设计与实现——数据结构实现之(二)链表与字典
链表首先Redis中存在的抽象结构为List,而链表是其一种实现方式,当list元素较多或者元素都为比较长的字符串时,采用链表作为底层实现。此外,链表还用在Redis服务器保存客户端状态、发布与订阅功能等等。 在Redis中,链表是双向链表,其Node结构定义如左图,List的定义如右图:观察得知,Redis中链表的特点如下无环(头节点的pre指向nul...原创 2019-04-15 16:30:06 · 149 阅读 · 0 评论 -
Redis 的设计与实现——数据结构实现之(三)跳跃表与整数集合
跳跃表首先,跳跃表是一种有序的数据结构,其查找的平均复杂度为O(logN),最坏的时间复杂度为O(N),大部分情况下可以与平衡树媲美。Redis使用它作为有序集合的实现,和集群节点中作为数据结构。跳跃表的数据结构定义如下,左边为node,右边为表:其中左图的后退指针是用来进行反向遍历链表,而成员对性robj必须为唯一的,每个节点的层高是1-32中的随机数。整...原创 2019-04-15 17:27:03 · 113 阅读 · 0 评论 -
Redis 的设计与实现——数据结构实现之(四)压缩列表
Ziplist 是Redis中对于少量列表项的实现用于hash和list的实现,是由连续的内存块组成的数据结构,主要是为了节约内存,没有一个struct:其中每个节点的entry的值为:其中previous_entry_length用于保存前一个节点的长度,当前一个结点长度在254之内,则该属性只有一个字节,否则该属性由5个字节组成,其中第一个字节为0XFE。这个属性当然是为了从后...原创 2019-04-15 21:21:35 · 134 阅读 · 0 评论 -
Redis 的设计与实现——之(六)Redis数据库的实现与过期机制
Redis服务器的数据库实现~redisServer 在启动的时候默认启动16个数据库,每个redisClient有自己连接的db,记录在redisClient的db属性里,客户端可以切换自己链接的db.不难理解,其实每个db都有一个dic字典,保存key与value,我们的set也是将key与value设置到里面,删除、更新同理。在对键进行访问时,会维护lru、更新dirty值等信息如下...原创 2019-04-16 17:32:14 · 336 阅读 · 0 评论 -
Redis 的设计与实现——(七)Redis持久化机制
RDB持久化 由于Redis是内存数据库,所以当数据库down的时候,所有数据都会丢失,为了防止数据的丢失,我们采用RDB将数据库状态保存为文件。首先生成RDB文件的命令有两个:SAVE 和 BGSAVE SAVE命令会阻塞Redis服务器,直到RDB文件创建完成 BGSAVE则不阻塞服务器,创建一个子进程进行保存 RDB文件生成后,...原创 2019-04-16 17:34:14 · 130 阅读 · 0 评论 -
Redis的设计与实现——数据结构实现之(一)字符串
Redis 数据结构实现(一)字符串 Redis采用SDS(simple dynamic string)来表示字符串,表示一个可以修改的字符串值。用在Redis的key和value中。注意:Redis所有的key都是这个类型,value有不同的其他类型,SDS还可以用在缓冲区中。其具体的定义如下:为什么不用C原生字符串?是因为Redis中有STRLEN命令,该命...原创 2019-04-15 15:17:29 · 155 阅读 · 0 评论