复制

旧版Redis的复制功能分为同步(sync)和命令传播两个操作。

sync:是一个非常耗费资源的操作                                           命令传播:

新版复制解决了旧版复制功能在处理断线重复制情况时的低效问题,使用PSYNC替代SYNC命令来执行复制的同步工作。

PSYNC命令具有完整重同步和部分重同步,完整重同步与sync类似,部分重同步如下:

部分重同步的实现

复制偏移量:

复制积压缓冲区:

复制积压缓冲区是由主服务器维护的一个固定长度先进先出队列,默认大小为1MB。

PSYNC实现流程:

总结:

Sentinel

Sentinel(哨兵)是redis的高可用(high avaliability)解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,当主服务器下线,自动升级一个从服务器为主服务器,代替已下线服务器接受命令。

集群

节点

槽指派

在集群中执行命令

在对数据库中的16384个槽都进行了指派之后,集群会进入上线状态,这时客户端就可以向集群中的节点发送数据命令了。

重新分片

Redis集群的重新分片操作可以将任意数量已经指派给某个源节点的槽改为指派给另一个目标节点,并且相关槽所属的键值对也会从源节点移动到目标节点。

复制和故障转移

Redis集群中的节点分为主节点和从节点,其中主节点用于处理槽,而从节点主要用于复制某个主节点,并在被复制的主节点下线时,代替下线主节点继续处理命令请求。

其中7000,7001,7002,7003为主节点,而7004,7005为从节点。

消息

MEET消息:发送者会向接受者发送MEET消息,请求接受者加入到发送者当前所处的集群里面。

PING消息:检查检点是否在线。

PONG消息:回应消息。

FAIL消息:当主节点A判断主节点B已经进入FAIL状态,节点A向集群广播一条关于节点B的FAIL消息,收到消息的节点都会立即将节点B标记为下线。

PUBLISH消息:当节点收到该命令,则执行,并广播一条PUBLISH命令,所有收到消息的节点都会执行相同的命令。

Redis设计与实现——多机数据库的实现的更多相关文章

  1. 探索Redis设计与实现9:数据库redisDb与键过期删除策略

    本文转自互联网 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial ...

  2. Redis学习笔记之多机数据库

    1.复制 完整重同步,从服务器完全复制主服务器的数据,主要通过RDB文件和单条命令传输(套接字连接). 部分重同步,主服务器进行命令传播的时候,不仅会把写命令发送给从服务器,而且还会把写命令放入复制积 ...

  3. 【笔记】《Redis设计与实现》chapter9 数据库

    9.1 服务器中的数据库 Redis服务器将所有都保存在服务器状态redis.h/redisServer结构中 struct redisServer{ //... // 一个数组,保存着服务器中所有数 ...

  4. redis实现与分析-多机数据库

    1.复制,主从结构 redis 2.8以前的复制,由2个步骤 1.初始的同步 2.命令传播 存在问题:同步时出现主从 断线,需要重新发送同步sync信号,非常消耗性能 redis2.8以后新版复制 采 ...

  5. Redis 设计与实现 (五)--多机数据库的实现

    多机数据库的实现 一.复制 slaveof  主服务器ip地址.形成主从关系. 1.同步  从向主服务器发送sync命令.  主服务器收到sync命令执行bgsave,生成rdb文件,缓冲区同时记录从 ...

  6. Redis多机数据库

    复制 PSYNC命令具有完整重同步(full resynchronization)和部分重同步(partial resynchronization)两种模式: ·其中完整重同步用于处理初次复制情况:完 ...

  7. Redis | 第4章 Redis中的数据库《Redis设计与实现》

    目录 前言 1. Redis中的数据库 2. 数据库的键空间 3. 键的生成时间与过期时间 4. Redis中的过期键删除策略 5. AOF.RDB和复制功能对过期键的处理 5.1 生成 RDB 文件 ...

  8. Redis设计与实现2.1:数据库和事件

    数据库和事件 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 数据库 数据库的结构定义在 redis.h/redisServer 这个结构体中,这个结构体有许多 ...

  9. 《Redis设计与实现》- 数据库

    1. 服务器中数据库结构 Redis 服务器将所有数据库都保存在服务器状态 redisServer 结构的 db 数组中,由 redisDb 结构代表一个数据库 struct redisServer ...

随机推荐

  1. java基础知识--环境变量配置

    说到java,大家应该都了解:J2SE基础.J2ME嵌入式.J2EE延伸的内容,而我们平时接触和所谈大部分都是J2EE企业级应用开发. 作为开发者,使用java之前,必须安装java开发环境,配置ja ...

  2. 修改 Ubuntu SSH 登录后的欢迎信息

    主要就是几个文件: cd  /etc/update-motd.d/ ls 00-header     90-updates-available  98-fsck-at-reboot 10-help-t ...

  3. java 如何正确的输出集合或者对象的值

    java 如何正确的输出集合或者对象的值 一般out.println(Object) 和 System.out.println(Object),其中输出的都是Object.toString()方法.重 ...

  4. ajax提交表单,包括跳入的坑!

    本来今天上午写了一个js执行上下文的一个了解.但是写一大半的时候出去有事,电脑关了啥都没了. 还是让我们进入正题 ajax提交表单,很简单,原生js的代码太复杂,我们就jq的去写. 创建html文件, ...

  5. react native redux

    redux可以解决, 程序中所有组件的状态统一管理, 从而使我们可以更加动态的,灵活的控制程序 React:数据管理使用props.stateRedux的主要思想:提供一个数据存储中心,可以供外部访问 ...

  6. CSS帧动画

    CSS帧动画 基础知识 通过定义一段动画中的关键点.关键状态来创建动画.@Keyframes相比transition对动画过程和细节有更强的控制. 过渡动画是两个状态间的变化,帧动画可以处理动画过程中 ...

  7. SpringSecurity+Oauth2+Jwt实现toekn认证和刷新token

    简单描述:最近在处理鉴权这一块的东西,需求就是用户登录需要获取token,然后携带token访问接口,token认证成功接口才能返回正确的数据,如果访问接口时候token过期,就采用刷新token刷新 ...

  8. 关于简单的数据双向绑定原理,defineProperty 和Proxy演示

    双向绑定,也就是说js中的数据传到页面,页面中的内容到js,实现同步更新,简单的演示可以直接复制下放HTML代码运行. 在这个例子中,我们使用defineProperty ,Object.define ...

  9. 关于SignalR 进行双向多步对话

    关于ASP.NET SignalR 解释百度百科是这样说的: ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 ...

  10. Linux系统安装Samba共享服务器详解及安装配置

    一.简介 Samba服务程序是一款基于SMB协议并由服务端和客户端组成的开源文件共享软件,实现了Linux和windows系统间的文件共享.SMB(Server Messages Block,信息服务 ...