《Redis设计与实现》学习
文章平均质量分 90
陆焉识i
这个作者很懒,什么都没留下…
展开
-
学习《Redis设计与实现》Chapter4
复制模式 通过SLAVEOF命令或者设置slaveof选项,让一个服务器去复制另一个服务器,被复制的服务器为主服务器,复制的服务器为从服务器。通过复制模式,能让从服务器保持和主服务器的数据一致。 实现 redis的复制功能分为同步和命令传播两个操作。 同步 当客户端向从服务器发送SLAVEOF命令,要求从服务器复制主服务器时,从服务器要先将自己的数据库状态更新至主服务器的数据库状态。这里需要分成两种情况 1.初次复制 · 从服务器向主服务器发送SYNC命令。 · 主服务器收到SYNC命令后执原创 2022-05-29 16:13:56 · 103 阅读 · 1 评论 -
学习《Redis设计与实现》Chapter3
发布与订阅 根据频道和模式的数据结构就可以看出,redis只是维护了订阅者和发布者的关系,并没有对消息做持久化操作。 频道 频道是通过服务器状态的pubsub_channels字典来管理的。字典的键是频道的名称,值是订阅了该频道的客户端链表。所以对于客户端来说,它是否订阅了某个频道本质上就是是否在该频道的客户端链表中。当一个频道没有订阅的客户端时,就会从字典中移除出去。 通过subscribe channel [channel...]命令订阅给定的一个或多个频道。 通过unsubscribe ch原创 2022-05-27 17:32:42 · 96 阅读 · 0 评论 -
学习《Redis设计与实现》Chapter2
Redis服务器 redis服务器本质是一个事件驱动程序,处理文件事件和时间事件两种事件。从事件处理的角度看,redis服务器的运行流程可以理解为在一个while循环中,等到文件事件产生后先处理已产生的文件事件,然后处理已达到的时间事件,事件的处理都是同步、有序且原子的执行。由于时间事件的处理依赖于文件事件的产生,所以时间事件通常会比设定的到达时间晚一些执行。而且为了尽可能的减少服务器阻塞的时间,降低事件饥饿的可能性,如果文件事件的写操作要写入的字节数大于一个预设值,会先跳出循环将余下的数据留到下次再写;原创 2022-05-22 01:12:52 · 375 阅读 · 0 评论 -
学习《Redis设计与实现》Chapter1
简单动态字符串SDS Redis只会使用C字符串作为字面量,大多数情况下都是使用自己构建的一种名为SDS的抽象类型作为默认字符串表示,其结构如下图。 struct sdshdr { // 字节数组,用于保存字符串 char buf[]; //记录buf数组中已用字节的数量,等于字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; } buf数组的规则和意义: 值得注意的是,SDS...原创 2022-03-25 20:59:16 · 442 阅读 · 0 评论