摘要: Redis源码分析--目录: 单机数据库服务器: Redis源码分析--事件处理器 - macguz - 博客园 (cnblogs.com) Redis源码分析--服务器(1)结构与启动 - macguz - 博客园 (cnblogs.com) Redis源码分析--服务器(2)执行命令的过程 - 阅读全文
posted @ 2022-02-08 15:48 macguz 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 事务: 命令 功能 MULTI 开启事务; EXEC 执行事务; WATCH key [key...] 监视数据库键;当乐观锁用; 一、命令实现: typedef struct redisClient { // ... multiState mstate; /* MULTI/EXEC state * 阅读全文
posted @ 2022-02-09 17:47 macguz 阅读(40) 评论(0) 推荐(0) 编辑
摘要: RDB持久化: 一、引言: 命令 功能 SAVE 创建RDB文件;阻塞服务器进程 BGSAVE 创建RDB文件;派生子进程,所以不阻塞服务器进程 ​ RDB文件以二进制形式存储,通过保存服务器中所有非空数据库以及其中的所有键值对(数据库状态)实现持久化; 二、RDB文件的创建: ​ BGSAVE和S 阅读全文
posted @ 2022-02-08 21:38 macguz 阅读(92) 评论(0) 推荐(0) 编辑
摘要: AOF持久化: ​ 与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态的。 一、结构实现: ​ redisServer中有关AOF持久化的字段: list *aof_rewrite_buf_blocks; /* Hold 阅读全文
posted @ 2022-02-08 19:46 macguz 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 命令传播: ​ 命令传播有两个对象: AOF文件: ​ AOF文件接收服务器发来的命令; 主从复制模式下的从服务器: ​ 从服务器与主服务器同步后,进行命令传播,从服务器接收主服务器发来的命令并执行[1]; ​ propagate函数会在call函数[1]中被调用,所以服务器执行命令,数据库状态产生 阅读全文
posted @ 2022-02-08 18:28 macguz 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 主服务器执行SYNC命令 一、部分重同步原理介绍: ​ 上文[1]介绍了从服务器执行SLAVEOF,向主服务器同步的过程。提到了部分重同步的实现要求主从两端都维护一个复制偏移量,这篇文章就先介绍另一个关键结构:复制积压缓冲区。 struct redisServer { /* Replication 阅读全文
posted @ 2022-02-07 23:34 macguz 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 发布与订阅: 一、介绍: ​ Redis提供了一个轻量的订阅机制: 命令 功能 PUBLISH channel message 将消息发送到指定的频道 SUBSCRIBE channel [channel …] 订阅给定的一个或多个频道的信息 UNSUBSCRIBE [channel [channe 阅读全文
posted @ 2022-02-07 20:35 macguz 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 服务器执行命令过程: 一、相关结构体: 名称 功能 redisServer 服务器结构体 redisClient 客户端结构体 redisCommand Redis命令,全局有一个命令字典,会在服务器启动初始化调用initServerConfig()->populateCommandTable()时 阅读全文
posted @ 2022-02-07 17:19 macguz 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 服务器: 一、服务器结构体 redisServer: struct redisServer { char *configfile; int hz; int dbnum; redisDb *db; dict *commands; aeEventLoop *el; int port; char *bin 阅读全文
posted @ 2022-02-07 17:17 macguz 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 事件处理器: ​ Redis采用Reactor模式作为自己的网络事件处理器,可以看作是单线程单Reactor模型。 一、主要结构体: 1、事件: /* File event structure */ typedef struct aeFileEvent { /* 事件类型:可读or可写 */ int 阅读全文
posted @ 2022-02-06 17:15 macguz 阅读(164) 评论(0) 推荐(0) 编辑