Redis核心技术与实战课程复习二

RDB

RDB和AOF一样,也是Redis的一种持久化方式,不过是使用快照的方式,即将Redis某一时刻的数据状态以文件的形式写入磁盘。
Redis有save和bgsave两个指令生成RDB文件

save和bgsave
  • save:在主线程中执行,会阻塞主线程
  • bgsave:由主线程fork出子进程执行,避免阻塞

生成RDB文件时写操作的问题

如果Redis没有其他任何操作。在生成RDB时执行写操作,会导致复制出的数据与生成RDB时的数据不一致,这是无法接受的,所以在这种情况下Redis只能执行读操作。
但是Redis可以借助操作系统的写时复制技术,即fork时子进程只拷贝主进程的内存页表,并不拷贝数据,只有在拷贝后主进程数据修改时才将对应的数据在子进程修改。fork出去以后,这段时间的写操作就开辟一块的新的内存记录这段时间的操作,RDB完之后再写入。

RDB的问题

当redis指令较多时,RDB相对于AOF来说持久化文件会小很多,但是RDB无法像AOF那样以较快的频率持久化,这就导致了如果使用RDB进行持久化发生宕机的话丢失的数据较多

RDB和AOF结合

Redis4.0提供了RDB和AOF结合持久化的功能,即在两次RDB之间的指令使用AOF进行持久化

主从模式(master-slave)

为了保证Redis的高可用性,Redis提供了主从模式,多个redis实例保存同一份数据,
写操作在主节点进行,写完之后由主节点同步给其他节点(从节点),读操作在所有节点都可以执行。

主从数据同步方式

第一次同步

  1. 从节点向主节点发送psync(?, -1)指令请求第一次数据同步,其中?表示主库的runID,因为第一次同步不知道主库的runID所以是?。-1是同步数据的偏移量,第一次为-1。
  2. 主节点收到从节点的同步需求后,fork出子进程生成RDB文件发送给从节点
  3. 在生成RDB文件过程中的指令主节点同样也会记录,在过程2执行完之后发送给从节点。

从节点过多如何解决

主-从-从模式,即主节点的从节点作为其他节点的主节点

主从节点连接断开如何解决

  • 在Redis2.8之前,主从节点连接断开,进行全量复制
  • 在Redis2.8及以后使用增量的方式进行同步。通过repl_backlog_buffer和偏移量完成增量同步,但是repl_backlog_buffer是一个环形buffer,所以在偏移量大于repl_backlog_buffer大小后,只能进行全量同步
  • 默认配置repl-backlog-size 1mb
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值