栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Redis持久化与复制

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Redis持久化与复制

Redis是内存型数据库,运行期间数据都保存在内存中.因此,一旦断电,redis的数据就将丢失.所以需要定时地将内存中的数据持久化到磁盘中.

Redis支持的持久化方式有两种,一种是RDB快照,一种是AOF命令.

RDB

redis中的serverCorn()负责定时生成RDB文件.这个函数的逻辑是

  • 当前程序是否含有子进程,如果含有子进程,就减产子进程是否执行完成,若执行完成,则父进程进行收尾工作
  • 如果没有子进程,就调用rdbSaveBackground()函数,在后台生成RDB文件 

需要注意的是,rdbSaveBackground()函数也是BGSAVE命令的执行函数,他会进行fork系统调用,创建一个子进程 来完成rdb操作.而主进程继续提供服务.

检查父进程中是否存在已经结束的子进程是调用wait3()函数,如果存在,会立刻返回子进程的pid.

由于父进程和子进程有各自独立的地址空间,因此,在子进程完成rdb操作后,父进程要进行收尾工作,修改一些信息.

rdb文件是二进制文件,对于不同类型的数据,redis使用不同的方式保存.

AOF

AOF(Append Only File)是指,在redis运行期间,不断将Redis的写命令写到文件中,在Redis重启后,只需要将写命令重新执行一遍,就可以恢复数据.

AOF功能主要分为两个:

  1. AOF持久化:将写命令写入AOF缓冲区,并定时将缓冲区数据冲刷进文件
  2. AOF重写:将数据库内容保存一份到文件中,替换原先的AOF文件

AOF持久化分为三个步骤:

  1. 命令传播:将写命令传播到AOF缓冲区
  2. 刷新缓冲区:将缓冲区数据写入文件
  3. 同步磁盘 

AOF重写在开启混合持久化后,会先讲数据库内容以rdb快照的形式保存,再将缓冲区的增量命令,以AOF的格式写入文件.

如果关闭了混合持久化,则将所有数据以写入命令的方式写入AOF文件

与RDB文件不同,AOF是文本格式的文件,以RESP(Redis Serialization Protocol)协议格式存储. 

主从复制

Redis主从复制是Redis分布式机制(Sentinel,Cluster)的基础.

在Redis主从复制中分为两个角色,主节点和从节点.这里指的节点都是Redis服务端.

主节点用来处理用户请求,并将数据复制到从节点.主要作用如下:

  1. 数据冗余备份,即使主节点数据丢失,从节点依然保留完整的数据
  2. 读写分离,从节点提供读服务,主节点提供写服务,提高Redis的吞吐量
  3. 故障恢复,主节点崩溃后,可以手动将从节点切换为主节点,继续提供服务

主从复制主要分为三个阶段:

  1. 握手
  2. 同步
  3. 复制 

主从复制是由从节点发起的,从节点将自身信息发送给主节点,随后等待主节点建立连接.

随后进行数据同步阶段,同步分为全量同步和部分同步.

最后是复制阶段,主节点在运行期间会将写命令异步发送给从节点,并不会等待从节点ACK确认. 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号