【Redis持久化】

持久化方式

RDB 快照模式

redis默认的方式是RDB

在某一个时间段生成一个全量的 dump.rdb 文件,把数据全部保存在这个文件。

触发机制

自动触发:
1:配置触发,在redis.config文件中默认配置的三种情况,三种情况是 任意满足一个就触发

save 900 1 // 900s内有一个key被修改就触发
save 300 10 // 300s内有10个key被修改就触发
save 60 10000 // 60秒内有10000个key被修改就触

2:shutdow
任何组件做持久化或高可用,正常关闭服务都会触发持久化 , 比如 mysql的redolog正常关闭都会触发落盘。

3:flushall
执行flushall操作会生成一个空的dump.rdb文件,因为数据都被清空了

手动触发:有特殊情况要关机或者重启手动去做备份。
1:save 指令 线程阻塞的
2:bgsave 在后台去fork一个子线程,不会阻塞其他指令

如何恢复rdb文件

重启服务,redis启动的时候会自动加载dump.rdb文件的数据

优缺点

缺点:数据安全性不够,容易造成数据丢失
优点:速度快,dump.rdb是一个二进制文件,恢复数据的时候性能比较高

AOF

AOF是以日志形式来记录每次操作,将redis所有执行过程的指令都记录下来,追加到AOF文件的末尾。
默认是不开启的,开启即默认,重启服务时会重新执行AOF文件中的命令来恢复数据,主要解决持久化实时性问题。

appendonly no // 默认不开启
appendfilename "appendonly.aof" //文件名

AOF是先执行命令在记录日志的。是因为redis向AOF记录日志的时候不会先对这些命令进行语法校验,如果先记录了日志,可能命令有误,恢复数据的时候就会报错

AOF机制的三种写回策略 appendfsync**

每条命令都要跟磁盘交互,会有性能问题,提供了三种方案:
默认使用everysec

redis.config配置文件:

#appendfsync always //同步写回,可以基本保证数据不丢失
appendfsync everysec // 执行完命令,先把日志记录到aof的内存缓冲区,每隔一秒同步到磁盘
#appendfsync no //由操作系统觉得何时写入磁盘

官方给出的解释:

appendfsync always:fsync每次将新命令附加到 AOF
时。非常非常慢,非常安全。请注意,在执行来自多个客户端或管道的一批命令之后,这些命令会附加到 AOF,因此这意味着一次写入和一次
fsync(在发送回复之前)。
appendfsync everysec :fsync每一秒。足够快(因为 2.4
版本可能和快照一样快),如果发生灾难,您可能会丢失 1 秒的数据。
appendfsync no:从不fsync,只是将您的数据交到操作系统手中。更快,更不安全的方法。通常,Linux 将使用此配置每 30 秒刷新一次数据,但这取决于内核的精确调整。
建议(和默认)策略是fsync每秒。它既快速又相对安全。该always策略在实践中很慢,但它支持组提交,因此如果有多个并行写入,Redis
将尝试执行单个fsync操作。

重写机制

随着写入操作的执行,AOF 变得越来越大,会存在一些冗余命令。此时就需要用到重写机制。
在4.0版本之前,采用的合并命令的方式,缺点是需要一条条比对,性能慢。

AOF+RDB混合

4.0版本以后,新增了AOF+RDB混合的方式。直接把AOF里面的内容压缩成RDB的内容格式(二进制),新加的数据继续追加。

默认是 开启的方式:

aof-use-rdb-preamble yes

当开启混合模式后,重写之后的aof文件是以rdb的二进制格式存储数据,继续进行写操作,后续操作在aof中依然是以命令的方式追加。所以AOF重写后由两个文件组成, 一个是RDBE二进制快照, 另一个是命令形式的文本。

什么时候重写(触发机制)

1:配置触发
redis.config配置

> auto-aof-rewrite-percentage 100 // 下次重写是第一次重写的2倍
> auto-aof-rewrite-min-size 64mb // 第一次文件必须达到64

2:手动触发
执行bgrewriteaof命令直接触发AOF重写

优缺点

优点:数据安全性高
缺点: 没有RDB快,4.0优化后速度差不多

关于redis的持久化官方讲述的非常清楚:https://redis.io/docs/manual/persistence/#log-rewriting

主从数据同步

配置主从只需要在slave配置,master服务不需要
在redis.conf文件中找到
######REPLICATION ########

slaveof 主地址 端口号
masterauth 主密码

主从数据的一致性是怎么保证的?
一:连接阶段,主从相互知道对方的ip 和端口,保证是相通的可以通信
二 :数据传输
1:全量同步,主收到从的sync的命令,通过bgsave指令 生成当前的RDB快照文件,传输给从,(此时主还是可以正常写入数据 ,bgsave不会阻塞命令)从收到后会清空自己数据,加载RDB文件。
2:增量同步
主节点新写的指令会保存到主的缓存区间,等待从加载完RDB文件后,在把所有新写的指令同步给从

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值