《Redis学习整理--第六期Redis的主从复制》

针对单台Redis服务器存在的单点故障及容量限制等问题,本文详细介绍了Redis主从复制的实现方式及其带来的读写分离、数据备份等优势。此外,还深入解析了复制初始化与同步阶段的工作原理,并探讨了配置项如何帮助确保数据一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当将Redis使用在具体的项目中时,只使用单台的Redis会有以下两种问题
  1. 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
  2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内容容量为256G,也不能将所有内容用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G
以上问题的解决方案之一 主从复制
大部分网站可能都是一次写入,多次读取(少写多读),所以可以将关系设置为主写从读

这样做的好处
  1. 读写分离,可以根据阅读数据情况自由扩展从库
  2. 数据被备份多份,出现故障可以快速恢复
配置
主从数据库在设置上非常简单 主库不需要增加任何配置,只需要在从库增加slaveof 主库IP 主库端口
从库要默认为只读模式 若需配置为可写 slave-read-only no(需要注意的是,从库修改数据不会被同步到主库,并且主库一旦修改数据,将会把从库的数据覆盖,所以不建议将从库设置为可写)

主从复制原理
当从数据库启动时,会向主数据库发送SYNC命令,主数据库接收到命令后,在后台保存快照(即RDB持久化),并将保存快照期间接收到的命令缓存起来,当完成持久化后,主数据库会将缓存的命令和快照文件传给从数据库,从数据库载入快照文件并缓存。这一过程被称为复制初始化
复制初始化后,每次主数据库进行写操作都会将命令同步给从数据库,从而保证主从一致,这一过程叫复制同步阶段

乐观复制
Redis容忍主从数据库在一段时间内数据看的内容是不同的,但两者最终会保持一致,也就是说,主从数据库的数据复制是异步的,主数据库完成写操作后,会直接反馈给客户端结果,这一特性保证了复制后主从数据库的性能不会受到影响,但另一方面也会产生一个主从数据库数据不一致的时间窗口,当主数据库执行一条写命令之后,主数据库的数据已经发生变动,然而在主数据库将该命令传送给从数据库之前,如果两个数据库之间的连接断开了,此时二者间的数据就不一致了。从这个角度看,主数据库无法得知命令最终同步给了几个从数据库,不过Redis提供了两个配置选项来限制只有至少同步给指定数量的数据库时,主数据库才是可写的:
min-slaves-to-write 3
min-slave2-max-lag 10

第一个参数表示只有当3个或3个以上的从数据库连接到主库时,主数据库才是可写的,否则返回错误。
第二个参数表示允许从数据库失去连接的最长时间,该选项默认是关闭的,在分布式系统中,打开并合理配置该选项可以降低主从架构因为网络分区导致的数据不一致问题。














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值