![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Redis
xinyYoung
这个作者很懒,什么都没留下…
展开
-
Redis设计与实现 笔记 第十九章 事务
事务Redis 通过MULTI EXEC WATCH 等命令来实现事务功能.通过输入 MULTI 开启事务模式,然后输入命令链,最后执行.19.1 事务的实现一个事务从开始到结束通常经历一下三个阶段.1): 事务开始.2): 命令入队.3): 事务执行.19.1.1 事务开始通过 MULTI 命令来表示事务开始void multiCommand(redisClient *c) ...原创 2020-02-27 16:58:06 · 171 阅读 · 0 评论 -
Redis设计与实现 笔记 第十八章 发布与订阅
发布与订阅Redis 的发布与订阅功能由 PUBLISH, SUBSCRIBE,PSUBSCRIBE 组成当客户端监听某个频道时,有人发布消息至该频道时,所有的订阅者都会收到这条信息.18.1 频道的订阅与退订当一个客户端执行了 SUBSCRIBE ,这个客户端将与被订阅频道之间就建立起了一种订阅关系.以键值对模式建立相关链接,存入下面结构中, 键为字符串对象, 值为链表对象.stru...原创 2020-02-27 13:10:28 · 193 阅读 · 0 评论 -
Redis设计与实现 笔记 第十七章 集群 cluster
集群Redis 集群是 Redis 提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能17.1 节点一个 Redis 集群通常由多个节点组成,在刚开始的时候,每个节点都处于一个只包含自己的集群中,如果需要将各个独立的节点连接起来,构成一个包含多个节点的集群.命令如下CLUSTER MEET <ip> <port>if (!strcas...原创 2020-02-25 21:09:47 · 414 阅读 · 0 评论 -
Redis设计与实现 笔记 第十六章 哨兵 Sentinel
Sentinel 哨兵哨兵是程序高可用性的一个保障.通过一个或多个哨兵程序组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进行下线状态时,自动从其从服务器中选出升级为主服务器,由新服务器来替代已下线的主服务器继续处理命令请求.后续内容就是详细介绍 Sentinel 系统对主服务器执行故障转移的整个过程16.1 启动并初始化 S...原创 2020-02-23 21:46:32 · 1396 阅读 · 0 评论 -
Redis设计与实现 笔记 第十五章 复制
复制在 Redis 中,可以用一台服务器来复制另一台服务器的数据,复制的服务器称为从服务器,被复制的服务器称为主服务器.这一概念也就是我们时常会看到的主从服务器概念,主从服务器可以用来负载均衡,进行定时的备份,用来保持数据库的安全性和维持高效.Redis 通过SLAVEOF ip port进行主从服务器的配置.进行主从配置之后,从服务器将完全和主服务器一样,保持完全的一致性.主服务...原创 2020-02-23 01:14:48 · 142 阅读 · 0 评论 -
Redis设计与实现 笔记 第十四章 服务器
服务器上一张了解了客户端以一个对象的方式来表明自己的身份以及当前所处的阶段,这章对应的会进行一个服务器的介绍.Redis 服务器负责与多个客户端建立网络链接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据,并通过资源管理来位置服务器自身的运转14.1 命令请求的执行过程以客户端向服务器发送命令为例,来进行客户端与服务器交互的过程说明.当客户端发出SET KEY VA...原创 2020-02-22 16:41:06 · 297 阅读 · 0 评论 -
Redis设计与实现 笔记 第十三章 客户端
客户端原本以为这一章是针对客户端程序的一个编写,带着这种思维去阅读,然后发现其实是指代在 redisServer 中的客户端对象,也就是客户端在服务器上的一个实体映射.具体结构如下typedef struct redisClient { // 套接字描述符 int fd; // 当前正在使用的数据库 redisDb *db; // 当前正在使用的数...原创 2020-02-21 22:42:37 · 147 阅读 · 1 评论 -
Redis设计与实现 笔记 第十二章 事件
事件本章介绍了 Redis 驱动的两大事件, 文件事件 和 时间事件.文件事件(file event): Redis 通过套接字与客户端进行连接,而文件时间就是服务器对套接字的抽象.服务器与客户端的通信会产生相应的文件时间,而服务器则通过监听并处理这些时间来完成一系列网络通信操作.时间时间(time event): Redis 服务器中的一些操作(serverCron) 需要在给定的时间点执...原创 2020-02-21 12:38:08 · 135 阅读 · 0 评论 -
Redis设计与实现 笔记 第十一章 AOF持久化
AOF 持久化APPEND ONLY FILEAOF持久化相对于 RDB 持久化不同, RDB 发起初始化时,会一次性将当前数据库中的对象都进行一次持久化操作,即使有 BGSAVE 命令这样的保存方式,在进行保存时,还是会占用一定的资源.且可能大部分的数据也根本没有变化.在面对上述描写的情况, AOF 持久化模式就出现了, 其记录了命令的输入,用增量的方式进行数据的持久化.11.1 AO...原创 2020-02-19 20:36:59 · 303 阅读 · 0 评论 -
Redis设计与实现 笔记 第十章RDB持久化
RDB 持久化Redis 是一个键值对数据库服务器,是在内存中存储的,当发生崩溃时,存储的数据将会丢失,所以需要一个落地策略.在此基础上, Redis 提供了 RDB 持久化功能, 这个功能可以将 Redis 在内存中的数据库状态保存到磁盘里面,避免数据意外丢失.RDB 持久化功能所生成的 RDB 文件是一个通过压缩的二进制文件,通过改文件可以还原成 RDB 文件生成时的数据库状态.SAV...原创 2020-02-19 16:32:01 · 127 阅读 · 0 评论 -
Redis设计与实现 笔记 第九章 数据库
数据库本章主要是围绕着 redisServer 结构简单的介绍了一下大致情况,包括客户端切换数据库的方法,数据库保存键值对的方法,以及真对数据的添加,查看,删除,更新操作的实现方法等,还包括键的过期处理,事件的通知,9.1 服务器中的数据库struct redisServer { /* General */ // 配置文件的绝对路径 char *configfi...原创 2020-02-18 16:43:56 · 205 阅读 · 0 评论 -
Redis设计与实现 笔记 第八章 对象
对象对象这一章节可以理解为前面七个章节的总结篇,仿佛是我在前七章中获取了七个拼图,而这一章中,我们将使用七章拼图来进行实际的拼接操作.Redis 并没有直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创造了一个对象系统,每种对象都用到了至少一种我们前面所介绍的数据结构.8.1 对象的类型和编码Redis 使用对象来表示数据库中的键和值,每一个键值对都是两个对象,键是一个对象,值...原创 2020-02-17 21:10:14 · 196 阅读 · 0 评论 -
Redis设计与实现 笔记 第七章 压缩列表
压缩列表压缩列表是列表键和哈希键的底层实现之一,当一个列表键值包含少量列表项,并且每个列表项,要么是小整数,要么是长度比较短的字符串,那么 Redis 就会使用压缩列表来做列表键的底层实现.7.1 压缩列表的构成zlbytes 4字节zltail 4字节zllen 2字节entryX 列表字节entryX 列表字节…zlend 1字节//zlbytes + zlt...原创 2020-02-16 17:05:27 · 287 阅读 · 0 评论 -
Redis设计与实现 笔记 第六章 整数集合
整数集合整数集合(intset) 是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合间的底层实现.6.1 整数集合的实现typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length;...原创 2020-02-16 02:44:05 · 108 阅读 · 0 评论 -
Redis设计与实现 笔记 第五章 跳跃表
跳跃表跳跃表是一种有序的数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的.跳跃表支持平均 O(logN) , 最坏 O(N) 的复杂度节点查找,还可以通过顺序性操作批量节点.节点整体效率接近红黑树,且代码复杂度低于红黑树.跳表的实现思路也类似于红黑树,区别于红黑树通过大于小于等于某一个节点,跳表是通过判断目标值是否在两个节点之间来确定区间,进而进行范围缩小,...原创 2020-02-15 21:21:45 · 88 阅读 · 0 评论 -
Redis设计与实现 笔记 第四章 字典
字典字典是 Redis 中相当重要的结构,可以说, Redis 数据库的底层就是用字典实现的,而对数据库的增删改查,也是基于对字典的操作实现的.字典的基本结构如下4.1.1 哈希表/* This is our hash table structure. Every dictionary has two of this as we * implement incremental rehas...原创 2020-02-15 16:15:01 · 153 阅读 · 0 评论 -
Redis设计与实现 笔记 第三章 链表
链表和链表节点的实现typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value;} listNode;typedef struct list { // 表头节点 ...原创 2020-02-14 15:51:15 · 76 阅读 · 0 评论 -
Redis设计与实现 笔记 第二章 简单动态字符串
SDS的定义redis使用自定义字符串来替代c语言传统的字符串,struct sdshdr { int len; // 当前字符串长度 int free; // 当前未使用的长度 char buf[]; // 字节数组,用于保存字符串,和 C 语言字符串一样用 '\0' 结尾};可以使用printf("%s",s->buff)来输出1:...原创 2020-02-14 14:21:43 · 93 阅读 · 0 评论