从0开始回顾Redis---系列五

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 主从复制1、什么是Redis主从复制?● 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。● 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。2、主从复制有哪些好处?● 读写分离:master 写、slave 读,提高服务器的读写负载能力;● 负载均衡:基于主从结构,配合读写分离,由 slave 分担 master 负载,并根据需求的变化,改变 slave 的数量,通过多个从节点分担

主从复制

1、什么是Redis主从复制?

  • 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
  • 默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

2、主从复制有哪些好处?

  • 读写分离:master 写、slave 读,提高服务器的读写负载能力;
  • 负载均衡:基于主从结构,配合读写分离,由 slave 分担 master 负载,并根据需求的变化,改变 slave 的数量,通过多个从节点分担数据读取负载,大大提高 Redis 服务器并发量与数据吞吐量;
  • 故障恢复:当 master 出现问题时,由 slave 提供服务,实现快速的故障恢复;
  • 数据冗余:实现数据热备份,是持久化之外的一种数据冗余方式;
  • 高可用基石:基于主从复制,构建哨兵模式与集群,实现 Redis 的高可用方案。

3、讲一讲读写分离?

Redis提供了主从库模式,以保证数据副本的一致,主从库之间采用的是读写分离的方式。

  • 读操作:主库、从库都可以接收;
  • 写操作:首先到主库执行,然后,主库将写操作同步给从库。  

4、为什么要采用读写分离的方式呢?

  1. 容易造成数据不一致:假设主从库都可以接收客户端的写操作,当客户端对同一个数据前后修改了多次,每一次的修改请求都发送到不同的实例上,会造成这个数据在多个实例上的副本不一致问题,在读取这个数据的时候,就可能读取到旧的值。如果要保持数据在多个实例的一致性,就要涉及到加锁、实例间协商是否完成修改等一系列操作,但这会带来巨额的开销。
  2. 保证数据的一致性:主从库模式一旦采用了读写分离,所有数据的修改只会在主库上进行,主库有了最新的数据后,会同步给从库,这样,主从库的数据就是一致的。

5、主从库间如何进行第一次同步?

主从库第一次同步分为三个阶段

  • 第一阶段:建立连接,协商同步;
  • 第二阶段:主库同步数据给从库;
  • 第三阶段:主库发送新命令给从库;


第一阶段: 主从库间建立连接,从库给主库发送psync命令,表示要进行数据同步,psync命令包含了主库的runID和复制进度offset两个参数。

  • runID,是每个Redis实例启动时都会自动生成的一个随机ID,用来唯一标记这个实例。当从库和主库第一次复制时,因为不知道主库的runID,所以将runID设为“?”。
  • offset,此时设为-1,表示第一次复制。

第二阶段: 主库收到psync命令后,会用FULLRESYNC响应命令带上两个参数:主库runID和主库目前的复制进度offset,返回给从库。从库收到响应后,会记录下这两个参数。

  • FULLRESYNC响应表示第一次复制采用的全量复制,也就是说,主库会把当前所有的数据都复制给从库。
  • 主库执行bgsave命令,生成RDB文件,发给从库,从库接收RDB文件,先清空当前数据库,然后加载RDB文件。

第三阶段:由于发送RDB过程期间会产生新数据,因此主库会把第二阶段执行过程中新收到的写命令,再发送给从库。

6、讲一讲主从级联模式分担全量复制时的主库压力?


一次全量复制中,对于主库来说,需要完成两个耗时的操作:生成RDB文件和传输RDB文件。如果从库数量很多,主库进行全量复制,会导致主库忙于fork子进程生成RDB文件,而fork这个操作会阻塞主线程处理正常请求,从而导致主库响应应用程序的请求速度变慢。

通过“主-从-从”模式将主库生成RDB和传输RDB的压力,以级联的方式分散到从库上

具体如下:

  • 1、手动选择一个从库(比如选择内存资源配置较高的从库),用于级联其他的从库。
  • 2、再选择一些从库,让和刚才所选的从库,建立起主从关系。

基于长连接的命令传播:  主从完成全量复制后会继续维持一个网络连接,主库会通过这个连接将后续陆续收到的命令操作再同步给从库,这个过程可以避免频繁建立连接的开销。

7、增量复制?

假设主从网络断了之后,主从库会采用增量复制的方式继续同步。

  • 全量复制是同步所有数据;
  • 增量复制只会把主从库网络断连期间主库收到的命令,同步给从库。

当主从库断连后,主库会把断连期间收到的写操作命令写入repl_backlog_buffer环形缓冲区,主库会记录自己写到的位置,从库则会记录自己已经读到的位置。

8、为什么主从库间的复制不使用AOF呢?

  1. 虽然AOF记录的操作命令更全,相比于RDB丢失的数据更少,但AOF文件比RDB文件大,网络传输比较耗时
  2. 从库在初始化数据时,RDB文件比AOF文件执行更快
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
16小时前
|
缓存 NoSQL Redis
Redis雪崩
Redis雪崩
31 0
|
16小时前
|
存储 NoSQL 测试技术
【Redis】redis为什么快
【Redis】redis为什么快
|
16小时前
|
存储 SQL NoSQL
[Redis]——初识Redis
[Redis]——初识Redis
|
8月前
|
存储 NoSQL Redis
|
16小时前
|
NoSQL 网络协议 安全
Redis系列-1.Redis浅谈
Redis系列-1.Redis浅谈
21 0
|
7月前
|
NoSQL Redis
06Redis - Redis的使用
06Redis - Redis的使用
36 0
|
7月前
|
存储 NoSQL Linux
Redis之Redis为什么这么快解读
Redis之Redis为什么这么快解读
|
9月前
|
消息中间件 NoSQL 测试技术
Redis2
Redis2
92 0
|
9月前
|
存储 缓存 NoSQL
Redis5
Redis5
101 0
|
存储 消息中间件 缓存
Redis总结(二)
redis 和 memcached 什么区别?为什么高并发下有时单线程的 redis 比多线程的memcached 效率要高?区别:1.mc 可缓存图片和视频。rd 支持除 k/v 更多的数据结构;2.rd 可以使用虚拟内存,rd 可持久化和 aof 灾难恢复,rd 通过主从支持数据备份;3.rd 可以做消息队列。原因:mc 多线程模型引入了缓存一致性和锁,加锁带来了性能损耗。redis 主从复制如何实现的?redis 的集群模式如何实现?redis 的 key 是如何寻址的?
89 0