
Redis
nanchengyu
这个作者很懒,什么都没留下…
展开
-
Redis 的设计与实现——数据结构实现之(二)链表与字典
链表 首先Redis中存在的抽象结构为List,而链表是其一种实现方式,当list元素较多或者元素都为比较长的字符串时,采用链表作为底层实现。此外,链表还用在Redis服务器保存客户端状态、发布与订阅功能等等。 在Redis中,链表是双向链表,其Node结构定义如左图,List的定义如右图: 观察得知,Redis中链表的特点如下 无环(头节点的pre指向nul...原创 2019-04-15 16:30:06 · 178 阅读 · 0 评论 -
Redis 的设计与实现——数据结构实现之(三)跳跃表与整数集合
跳跃表 首先,跳跃表是一种有序的数据结构,其查找的平均复杂度为O(logN),最坏的时间复杂度为O(N),大部分情况下可以与平衡树媲美。Redis使用它作为有序集合的实现,和集群节点中作为数据结构。 跳跃表的数据结构定义如下,左边为node,右边为表: 其中左图的后退指针是用来进行反向遍历链表,而成员对性robj必须为唯一的,每个节点的层高是1-32中的随机数。 整...原创 2019-04-15 17:27:03 · 133 阅读 · 0 评论 -
Redis 的设计与实现——数据结构实现之(四)压缩列表
Ziplist 是Redis中对于少量列表项的实现用于hash和list的实现,是由连续的内存块组成的数据结构,主要是为了节约内存,没有一个struct: 其中每个节点的entry的值为: 其中previous_entry_length用于保存前一个节点的长度,当前一个结点长度在254之内,则该属性只有一个字节,否则该属性由5个字节组成,其中第一个字节为0XFE。这个属性当然是为了从后...原创 2019-04-15 21:21:35 · 159 阅读 · 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 · 376 阅读 · 0 评论 -
Redis 的设计与实现——(七)Redis持久化机制
RDB持久化 由于Redis是内存数据库,所以当数据库down的时候,所有数据都会丢失,为了防止数据的丢失,我们采用RDB将数据库状态保存为文件。首先生成RDB文件的命令有两个:SAVE 和 BGSAVE SAVE命令会阻塞Redis服务器,直到RDB文件创建完成 BGSAVE则不阻塞服务器,创建一个子进程进行保存 RDB文件生成后,...原创 2019-04-16 17:34:14 · 154 阅读 · 0 评论 -
Redis的设计与实现——数据结构实现之(一)字符串
Redis 数据结构实现(一)字符串 Redis采用SDS(simple dynamic string)来表示字符串,表示一个可以修改的字符串值。用在Redis的key和value中。 注意:Redis所有的key都是这个类型,value有不同的其他类型,SDS还可以用在缓冲区中。 其具体的定义如下: 为什么不用C原生字符串? 是因为Redis中有STRLEN命令,该命...原创 2019-04-15 15:17:29 · 182 阅读 · 0 评论