在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡灯需求.Redis提供了复制功能,实现了相同数据多个副本,复制功能作是高可用Redis的基础,深入理解复制的工作原理与使用技巧对我们日常开发运维非常有帮助. 1. 配置 1.1 建立复制 每个从节点只能有一个主节点,而主节点可以同时具有多个从节点.复制的数据流是单向的,只能由主节点复制到从节点. 配置复制的三种方式: 配置文件中键入 slaveof {masterHost} {masterPort},随…
<Redis设计与实现>读书笔记 很喜欢这本书的创作过程,以开源的方式,托管到Git上进行创作: 作者通读了Redis源码,并分享了详细的带注释的源码,让学习Redis的朋友轻松不少: 阅读优秀的源码作品能快速的提升编码内功,而像Redis这样代码量不大(2万多行)却句句精致的作品,当然不能错过: 有兴趣的朋友当好好享用: 源码:https://github.com/huangz1990/annotated_redis_source 以下是这本书重点环节的读书笔记: Redis的内部字符串实现…
Redis学习资料与过程记录 在实习中经常会用到很多Redis,对Redis有了一些模糊的了解,总觉得隔靴搔痒的不痛快,所以决定开始深入的了解Redis,也作为我实习期间的目标. 这篇只是为了占个位置,方便后面的笔记与章节对齐.:) 目前有的资料: 源码: https://github.com/antirez/redis <Redis设计与实现>第二版 黄建宏著…
目录 前言 1. 旧版复制功能的实现 1.1 同步与命令传播 1.2 旧版复制功能的缺陷 2. 新版复制功能的实现 2.1 部分重同步的实现原理 3. PSYNC 命令的实现 4. 复制的详细步骤 4.1 设置主服务器的地址和端口 4.2 建立套接字连接 4.3 发送 PING 命令 4.4 身份验证 4.5 发送端口信息 4.6 同步 4.7 命令传播 5. 心跳检测 最后 前言 参考资料:<Redis设计与实现 第二版>: 第四部分为多机数据库的实现,主要由以下模块组成:复制.Sentin…
目录 前言 1. 简单动态字符串 1.1 SDS的定义 1.2 空间预分配与惰性空间释放 1.3 SDS的API 2. 链表 2.1 链表与节点的定义 2.2 链表的API 3. 字典 3.1 哈希表与哈希节点 3.2 字典 3.3 哈希算法 3.4 解决键冲突 3.5 rehash 3.6 渐进式rehash 3.7 字典的API 最后 前言 参考资料:<Redis设计与实现 第二版>: 本篇笔记按照书里的脉络,将知识点分为四个部分.其中第一部分数据结构与对象分为上中下篇,上篇包括:SDS.…
数据库和事件 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 数据库 数据库的结构定义在 redis.h/redisServer 这个结构体中,这个结构体有许多的字段用以记录 Redis 数据库的状态.学习数据库的过程中会慢慢地接触这里面的各种字段. struct redisServer { //... } 不同的数据库 在上述结构中, int dbnum 保存了数据库的数量,默认为16:redisDb *db 指向了服务器中所有的数据库(如下 1 处) 而客户端…
集群 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 集群中的节点 创建集群 通过 CLUSTER NODE 命令可以查看当前集群中的节点.刚启动时,默认每一台节点都是一个集群. sequenceDiagram participant r0 as redis.cn 7000 participant r1 as redis.cn 7001 participant r2 as redis.cn 7002 note over r1: CLUSTER MEET redis.…
Sentinel哨兵 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 哨兵:监视.通知.自动故障恢复 启动与初始化 Sentinel 的本质只是一个运行在特殊模式下的 Redis 服务器,所以启动 Sentinel 的步骤如下: 初始化一个普通的 Redis 服务器,不过也有一些不同: 将一部分 Redis 服务器使用的代码替换成 Sentinel 专用代码 举两个例子: 服务器端口由 redis.h/REDIS_SERVERPORT 修改为 sentinel.c/…
主从复制 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 SLAVEOF 新旧复制功能 旧版复制功能 旧版复制功能的实现为 同步 和 命令传播: 当刚连上Master时,要做一次全同步: sequenceDiagram participant Slave participant Master Slave->>Master: SYNC Master->>Master: BGSAVE Master->>Master: 记录此时的命令到…
Redis设计与实现(一~五整合版) by @飘过的小牛 一 前言 项目中用到了redis,但用到的都是最最基本的功能,比如简单的slave机制,数据结构只使用了字符串.但是一直听说redis是一个很牛的开源项目,很多公司都在用.于是我就比较奇怪,这玩意不就和 memcache 差不多吗?仅仅是因为memcache是内存级别的,没有持久化功能.而redis支持持久化?难道这就是它的必杀技? 带着这个疑问,我在网上搜了一圈.发现有个叫做huangz的程序员针对redis写了一本书叫做<redis设…