Redis的持久化模式

Redis 的持久化包括RDB和AOF两种模式,用于防止数据丢失。RDB在指定条件如键变化数量时触发全量持久化,但可能丢失部分数据。AOF则记录每次命令,做增量更新,更安全但效率较低。混合持久化结合两者优点,先用RDB快照,再追加AOF内容。启用AOF模式时,若同时开启RDB,系统将以AOF优先。
摘要由CSDN通过智能技术生成

什么是持久化:所谓的持久化 就是将内存的数据 保存到硬盘 Redis中的数据持久化实际上为了进一步保证数据不被丢失 这个就是咋们的Redis的持久化

明白一个问题:即使引入了Redis的持久化 数据还是保证不了 完全不丢失

1、RDB模式的持久化

Redis默认支持的是 RDB模式
RDB模式默认保存的数据是 二进制 二进制大家都知道 速度快

那么这个数据在什么情况下会将内存中的数据同步到硬盘呢?

save 900 1 //在900秒钟的时候内 如果有 1个key发生改变 那么将触发 内存和硬盘同步
save 300 10 //如果在300秒的时间内 如果有10个key发生改变 那么将触发内存和硬盘同步
save 60 10000 //如果在60秒钟的时间内有10000个key发生改变 那么也将触发 内存和硬盘同步

这种赤裸裸的策略 很有可能丢掉数据
60时间内 只有 9999个key发生改变 但是断电了 一旦断电了 那么 内存就清空了 数据也就丢失了

RDB模式 是怎样进行数据同步的呢?

RDB在进行数据同步的时候 实际上是先删除硬盘上的 rdb文件,然后再向rdb文件中重新写入数据,也就是说每一次写入数据都是整个内存的所有数据,而不是什么增量数据
大家有没有想过这个问题呢?
假设在进行数据同步的时候,刚好清除完所有硬盘上的数据,这个时候断电了,那么就会导致整个数据的丢失。但是你说这种模式有没有啥好处呢?
有:那就是他在保存数据的时候是保存的是内存中的所有数据,而不是增量数据,这个就导致了这种模式最适合的场景就是内存数据的备份,因为备份的内容写成了 二进制内容,所以速度快,也适合做数据的恢复

2、AOF模式的持久化

如果要打开 aof模式?
appendonly yes 开启AOF持久化
aof-use-rdb-preamble no 关闭混合持久化

举个例子,set li 123这个命令,在我们的aof文件中是这样存储的

3 星号:代表的是 array 3代表的意思是 命令离一共三项 set,li和123
$3 美元符号 $:表示每个项的开始 3代表的是 下面的set由三个字符构成
set
$8
li
$3
123

使用AOF持久化时,aof文件会将每一个命令都依次存储在文件中,极其的浪费资源,我们可以使用bgrewriteaof手动重写AOF文件内容,对其进行优化,如果每一次都进行手动重写,那就实在是太麻烦了,Redis中会自动进行重写,只是有两个条件:

auto-aof-rewrite-percentage 100 //必须在原来的配置上 百分百的增长才会重写 64M+64M=128M
auto-aof-rewrite-min-size 64mb //我们的aof文件必须达到 64M才重写

大家有没有疑问:
我们开启了 AOF模式,系统本身又开启了 RDB模式,那么这个时候系统会以谁优先呢?

如果是同时开启了 AOF和RDB,没有开启混合持久化的话,那么系统会以 AOF模式优先

在AOF模式下 什么时候 内存的数据才会和硬盘同步呢?

AOF在同步的时候并不会删除原来的内容,而是在原来内容的基础上进行追加,这种相当于是做增量更新,而不是全量更新,这个就是同步策略 ---->同步的效率要高一些

3、混合持久化

混合持久化开启命令aof-use-rdb-preamble yes
混合持久化就是每一次AOF文件在进行重写优化之后,那么原来的AOF的部分除了被优化之后,还要翻译成二进制进行存储

如果翻译之后 你还要操作redis,那么后面的操作依然会记录成AOF的样式
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦及海深@无

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值