`

Redis 序列之三——Redis的M/S(主从机制)

阅读更多

一、M/S主从复制特征

                redis主从(M/S)复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点:   

                (1)master可以有多个slave;

                (2)一个slave可以接收其他slave的链接,即不仅仅能连接一个master所属的slaves,而且能连接到slave的slave,从而形成了“图”结构;

                (3)主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。 

                (4)主从复制可以用来提高系统的可伸缩性,我们可以用多个slave专门用于client的读请求,比如sort操作可以使用slave来处理,也可以用来做简单的数据冗余。

                (5)可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

 

二、M/S主从复制过程

             (1) Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT

      (2) Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(最新版的Redis已经不需要让Slave阻塞)

      (3) Master端收到sync命令简单判断是否有正在进行的内存快照子进程,没有则立即开始内存快照,有则等待其结束,当快照完成后会将该文件发送给Slave端;

      (4)Slave端接收Master发来的内存快照文件,保存到本地,待接收完成后,清空内存表,重新读取Master发来的内存快照文件,重建整个内存表数据结构,并最终状态置位为 REDIS_REPL_CONNECTED状态,Slave状态机流转完成;

      (5)Master端在发送快照文件过程中,接收的任何会改变数据集的命令都会暂时先保存在Slave网络连接的发送缓存队列里(list数据结构),待快照完成后,依次发给Slave,之后收到的命令相同处理,并将状态置位为 REDIS_REPL_ONLINE

 

三、M/S主从复制缺陷

            M/S主从复制是全量复制,不是增量复制,这样的话,当一台slave因为某种原因与master断开,那么当重新进行连接后,就需要重新获取整个内存快照,这样不仅恢复比较慢,而且还会给master带来压力。

 

四、M/S主从配置方式

            配置slave服务器很简单,只需要在slave的配置文件中加入如下配置:

            slaveof  192.168.1.1 6379  #指定master的ip和端口

 

分享到:
评论

相关推荐

    Redis部署笔记(单机+主从+哨兵+集群)

    基于Centos7系统,由浅入深讲解如何部署Redis的四种模式,分别是:单机模式、主从模式、哨兵模式、集群模式。 完整原文:http://exp-blog.com/2018/09/14/pid-2285/ 同时提供Jedis客户端封装源码: ● 屏蔽Jedis与...

    shiro连接redis集群 根据org.crazycake.shiro包改造源码

    例如,原本的实现可能仅支持单个Redis实例,改造后可能实现了多节点的发现、读写操作的路由以及故障转移机制。 具体改造可能包括以下方面: 1. **RedisClient**:原有的Shiro Redis连接器可能使用了单一的Redis...

    tomcat7+redis主从实现session共享相关jar包

    在实现Tomcat7与Redis的Session共享时,Jedis负责将Tomcat中的Session数据序列化并存储到Redis中,以及在需要时反序列化并返回给Tomcat。 其次,`commons-pool2-2.0.jar`是Apache Commons的一个组件,提供了对象池...

    c++ 操作redis数据库

    测试是确保软件质量的关键环节,对于C++与Redis的集成尤其重要,因为网络通信和数据序列化/反序列化都可能引入错误。 最后,`redisconnect.h`可能是一个头文件,定义了与Redis连接相关的类或结构体。在C++中,连接...

    redis-7.2.3.zip

    本次我们关注的是其Linux版本的最新发行版——redis-7.2.3.zip。这个压缩包包含了在Linux环境下运行Redis 7.2.3所需的所有文件。 Redis 7.2.3的更新可能包含性能优化、新功能的引入、bug修复以及对旧特性的改进。...

    redis-4.0.11 已编译版本

    在搭建Redis集群时,你需要至少三个节点(包括主节点和副本节点)来保证数据的高可用性。`redis-trib.rb`将帮助你完成这一过程,同时确保数据在节点间正确复制。集群的每个节点都需要运行`redis-server`,并通过`...

    redis-server:5.0.14.1 windows版本

    标题提到的是Redis的特定版本——5.0.14.1,专为Windows操作系统设计。这个版本的Redis是经过编译和配置,可以直接在Windows环境下运行的。 在描述中,我们看到这个压缩包提供了一个“解压即用”的版本,这意味着...

    redis_linux安装包.zip

    3. **主从复制**:Redis支持主从复制,通过复制,可以实现数据备份和负载均衡。 4. **事务**:Redis支持简单的原子性事务,允许在一个操作序列中执行多个命令。 5. **发布/订阅**:Redis提供发布/订阅模式,可以...

    redis-5.0.5.zip windows版本

    - Redis在Windows上可能遇到的兼容性和性能问题,如文件锁机制、线程池等,需要关注社区更新和解决方案。 - Windows服务的管理,除了`sc`命令,也可以通过`redis-server.exe --service-install`和`--service-...

    Redis-5.0.14.1+Another-Redis-Desktop-Manager.1.5.8 windows版

    3. **流(Streams)**:在5.0版本中,Redis引入了新的数据结构——Stream,它是一种日志数据结构,允许存储有序的时间序列数据,适用于实时分析和消息传递。 4. **Lua脚本增强**:Redis支持在服务器端执行Lua脚本,...

    Redis - Redis深度历险.pdf.zip

    3. **复制**:Redis支持主从复制,可以创建多个副本以提高可用性和读取性能。复制是异步的,允许数据在主服务器和从服务器之间进行延迟同步。 4. **事务**:Redis提供简单的事务支持,允许用户在一个操作序列中执行...

    ServiceStack.Redis-5.8无限制.zip

    2. **序列化支持**:为了方便.NET对象与Redis之间的数据交换,ServiceStack.Redis集成了多种序列化器,包括Json.NET、FastJson和protobuf等,允许开发者选择最适合其项目的序列化方式。 3. **连接池管理**:高效的...

    阿里巴巴Redis使用规范

    "阿里巴巴Redis使用规范" 本文将详细介绍阿里巴巴28条Redis使用规范,涵盖了Redis性能优化、数据存储、安全、实例管理等方面的内容。 规范一:控制key的长度 为了避免Redis中的keys过长,阿里巴巴建议控制key的...

    redis-3.2.2.gem redis-3.2.2.gem redis-3.2.2.gem

    总之,Redis 3.2.2是一个强大的键值存储系统,它的高效性能、丰富的数据结构以及灵活的用法使其成为许多现代应用的首选数据库之一。了解并熟练掌握这些知识点,将有助于你在开发和运维中更好地利用Redis。

    Redis学习指南 Redis学习手册

    三、Redis性能优化 1. 内存管理:理解Redis的数据结构和内存分配策略有助于优化内存使用,例如合理设置最大内存限制,避免内存碎片。 2. 配置调整:根据实际场景调整Redis配置,如适当增加客户端连接数,优化网络...

    redis-6.2.13.tar.gz

    Redis 是一个高性能的键值数据库,它以开源的方式提供服务,广泛应用于缓存、消息队列、数据存储等多个场景。Redis-6.2.13是Redis的一个稳定版本,提供了许多增强的功能和优化,旨在提高性能和稳定性。下面将详细...

    linux免安装 redis

    Redis支持简单的事务功能,允许在一个操作序列中执行多个命令,并保证它们的原子性。通过`MULTI`、`EXEC`命令可以开启和结束一个事务。 10. **Redis的发布订阅(Pub/Sub)**: Redis还提供了发布/订阅功能,允许...

    ServiceStack.Redis操作工具类

    同时,Redis的主从复制功能也能通过ServiceStack.Redis轻松实现。 8. **性能优化**:学习如何通过调整连接池大小、预取策略、批处理操作等手段优化ServiceStack.Redis的性能。 9. **错误处理和异常**:理解不同...

    ServiceStack.Redis 3.9

    6. **序列化**:库内置了对多种序列化器的支持,包括Json.NET、protobuf等,这使得在Redis中存储和检索对象变得容易。 7. **高级功能**:如脚本(Lua Scripting)支持,可以执行预编译的Lua脚本来提高性能,以及...

    Redis 入门指南.pdf

    Redis 是一个开源的、高性能的键值存储系统,它被广泛应用于数据缓存、消息队列、数据库等多个领域。作为一款非关系型数据库,Redis 的优势在于其内存存储和高速读写性能,使得数据处理速度极快。本指南将帮助初学者...

Global site tag (gtag.js) - Google Analytics