浅析 Redis 复制

本文深入探讨了Redis的复制功能,包括复制的两种模式、优点(如高可用性、高性能和水平扩展性)、缺点以及复制实时性和数据一致性之间的矛盾。详细解析了复制过程,增量复制机制,以及半同步复制策略,旨在帮助读者理解Redis复制的核心原理和关键特性。
摘要由CSDN通过智能技术生成

摘要


早期的 RDBMS 被设计为运行在单个CPU之上,读写操作都由经单个数据库实例完成,复制技术使得数据库的读写操作可以分散在运行于不同CPU之上的独立服务器上.Redis作为一个开源的、优秀的key-value缓存及持久化存储解决方案,也提供了复制功能,本文主要介绍Redis的复制原理及特性。


Redis复制概论


数据库复制指的是发生在不同数据库实例之间,单向的信息传播的行为,通常由被复制方和复制方组成,被复制方和复制方之间建立网络连接,复制方式通常为被复制方主动将数据发送到复制方,复制方接收到数据存储在当前实例,最终目的是为了保证双方的数据一致、同步。


复制示意图


Redis复制方式


Redis的复制方式有两种,一种是主(master)-从(slave)模式,一种是从(slave)-从(slave)模式,因此Redis的复制拓扑图会丰富一些,可以像星型拓扑,也可以像个有向无环:


Redis集群复制结构图


通过配置多个Redis实例独立运行、定向复制,形成Redis集群,master负责写、slave负责读。


复制优点


通过配置多个Redis实例,数据备份在不同的实例上,主库专注写请求,从库负责读请求,这样的好处主要体现在下面几个方面:


1、高可用性


在一个Redis集群中,如果master宕机,slave可以介入并取代master的位置,因此对于整个Redis服务来说不至于提供不了服务,这样使得整个Redis服务足够安全。


2、高性能


在一个Redis集群中,master负责写请求,slave负责读请求,这么做一方面通过将读请求分散到其他机器从而大大减少了master服务器的压力,另一方面slave专注于提供读服务从而提高了响应和读取速度。


3、水平扩展性


通过增加slave机器可以横向(水平)扩展Redis服务的整个查询服务的能力。


复制缺点


复制提供了高可用性的解决方案,但同时引入了分布式计算的复杂度问题,认为有两个核心问题:


  1. 数据一致性问题,如何保证master服务器写入的数据能够及时同步到slave机器上。


  2. 编程复杂,如何在客户端提供读写分离的实现方案,通过客户端实现将读写请求分别路由到master和slave实例上。


上面两个问题,尤其是第一个问题是Redis服务实现一直在演变,致力于解决的一个问题。


复制实时性和数据一致性矛盾


Redis提供了提高数据一致性的解决方案,本文后面会进行介绍,一致性程度的增加虽然使得我能够更信任数据,但是更好的一致性方案通常伴随着性能的损失,从而减少了吞吐量和服务能力。然而我们希望系统的性能达到最优,则必须要牺牲一致性的程度,因此Redis的复制实时性和数据一致性是存在矛盾的。


Redis复制原理及特性


slave指向master


举个例子,我们有四台redis实例,M1,R1、R2、R3,其中M1为master,R1、R2、R3分别为三台slave redis实例。在M1启动如下:


./redis-server ../redis8000.conf --port 8000


下面分别为R1、R2、R3的启动命令:


./redis-server ../redis8001.conf --port 8001 --slaveof 127.0.0.1 8000

./redis-server ../redis8002.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值