![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
文章平均质量分 61
WhiteMonster257
这个作者很懒,什么都没留下…
展开
-
Redis的RDB持久化和AOF持久化总结
RDB持久化 这个功能可以将Redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失。 由于RDB文件是保存在磁盘里面的,所以即使Redis服务器进程退出,甚至运行Redis的服务器停机,只要存在RDB文件就可以还原数据库状态。 RDB文件的创建和载入 保存数据库状态生成一个RDB文件,这个文件由两个命令生成,一个是SAVE一个是BGSAVE。 SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕,在阻塞期间服务器不能处理任何请求。 BGSAVE命令会派生一个子进程,然后由子进程负责创建R原创 2021-05-20 00:15:29 · 73 阅读 · 0 评论 -
Redis服务器数据库的实现
Redis服务器数据库的实现 redis服务器将所有数据库都保存在redis.h/redisServer结构体中的Db数组中,每个Db数组都是一个redis.Db结构。初始化数据库时会根据redisServer结构中的dbnum属性来决定数据库的多少。 struct redisServer{ ... redisDb *db;//一个数组,保存者服务器中的所有数据库 int dbnum;//服务器的数据库数量根据配置文件生成 ... } typedef struct redisDb{ .原创 2021-05-17 21:28:22 · 93 阅读 · 0 评论 -
Redis压缩列表
Redis压缩列表 压缩列表是一种为节约内存而开发的顺序型数据结构。 是列表键和哈希键的底层实现之一。(包含少量列表项,列表项是小整数值或长度较短的字符串)(只包含少量键值对,值是小整数值或长度较短的字符) 是由一系列特殊编码的连续内存块组成的顺序结构. zlbytes:记录整个压缩列表占用的内存字节数 zltail:表尾结点距离压缩列表起始位置多少字节(如果需要访问表尾结点,无需遍历整个压缩列表就可以得到表尾地址) zllen:压缩列表中结点的数量 entryx:结点 zlend:用于标记压缩列表的尾端原创 2021-05-15 19:22:24 · 69 阅读 · 0 评论 -
Redis整数集合
Redis整数集合 整数集合(inset)是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时,Redis就会使用整数集合作为集合键的底层。 整数集合的实现 typedef stryct intset{ //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[]; }intset; 这个数组contents不包含重复项,并且数组的真正类型取决于encodin原创 2021-05-15 18:24:53 · 71 阅读 · 0 评论 -
Redis跳跃表
Redis跳跃表 跳跃表是一种有序的数据结构,它通过在每个结点中维持多个指向其他结点的指针,从而达到快速访问的目的。 作为有序集合键的底层实现,集群结点中的内部数据结构。 跳跃表的实现 zskiplist结构用于保存跳跃表节点的相关信息 typedef struct zskiplist{ //表头结点和表尾结点 struct zskiplistNode *header,tail; //表中结点的数量 unsigned long length; //表中最层数最大的结点 int level; }z原创 2021-05-12 18:41:33 · 47 阅读 · 0 评论 -
Redis字典
Redis字典 一种用于保存键值对的抽象数据结构,Redis的数据库就是使用字典来作为底层实现的,字典还是哈希键的底层实现之一. 字典的实现 Redis中字典使用哈dictht表作为底层,一个哈希表里面可以有多个哈希表结点,而每个哈希表结点就保存了字典中的一个键值对. 哈希表 typedef struct dictht{ //哈希表数据 dictEntry **table; //哈希表大小 unsigned long size; //哈希表大小掩码,用于计算索引值 //总是等于size - 1原创 2021-05-11 22:14:44 · 95 阅读 · 0 评论 -
Redis链表
Redis链表 Redis构建了自己的链表实现 eg:列表键的底层实现之一就是链表,发布与订阅、慢查询、监视器等功能也用到了链表,Redis服务器本身还用链表来保存多个客户端的状态信息,以及使用链表来构建客户端输出缓冲区。 链表与链表节点的实现 typedef struct listNode{ //前置结点 struct listNode *prev; //后置结点 struct listNode *next; //节点的值 void *value }listNode; typedef str原创 2021-05-09 16:10:11 · 82 阅读 · 0 评论 -
Redis简单动态字符串
Redis简单动态字符串 Redis没有直接使用C语言传统的字符串表示,而是自己构建了一种名为SDS的抽象类型,并将其作为Redis的默认字符串表示。 在Redis中C字符串只会用在一些无须对字符串值进行修改的地方,比如打印日志 ###SDS的定义 每一个sds.h/sdshdr结构代表一个SDS值 struct sdshdr{ //记录buf数组中已经使用的字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用的字节数量 int free; //字节数组,用原创 2021-05-07 22:05:16 · 61 阅读 · 0 评论