Redis持久化操作RDB和AOF及数据备份恢复方式

持久化的意义:Redis对数据的操作都是基于内存的,当遇到了进程退出、服务器宕机等意外情况,如果没有持久化机制,那么Redis中的数据将会丢失无法恢复。有了持久化机制,Redis在下次重启时可以利用之前持久化的文件进行数据恢复。

默认只有RDB开启,但是如果开启了AOF,系统默认读取AOF的数据因为AOF保存数据更完整

RDB(默认开启)

在指定的时间间隔内将内存中的数据集快照写入磁盘

触发方式

save和bgsave命令都可以手动触发RDB持久化

save

执行save命令会手动触发RDB持久化,但是save命令会阻塞Redis服务,直到RDB持久化完成。当Redis服务储存大量数据时,会造成较长时间的阻塞,不建议使用。

bgsave

执行bgsave命令也会手动触发RDB持久化,和save命令不同是:Redis服务一般不会阻塞。Redis进程会执行fork操作创建子进程,RDB持久化由子进程负责,不会阻塞Redis服务进程。Redis服务的阻塞只发生在fork阶段,一般情况时间很短。

RDB数据备份恢复方式

1.在conf文件配置一下假设20秒内至少有三个key变化就进行持久化操作
在这里插入图片描述
2.查看rdb文件 这时候大小是92
在这里插入图片描述
3.set几个值20秒后会进行持久化操作
在这里插入图片描述
4.这时候rdb大小改变了 说明成功了
在这里插入图片描述
5.先复制一份文件
在这里插入图片描述
6.这时候杀死redis进程并删除dump.rdb文件
在这里插入图片描述
7.重启redis后,发现里数据也都没了
在这里插入图片描述
8.先杀死redis,然后把d.rdb文件改成dump.rdb,然后再重启(刚刚重启redis只是为了看数据,改完数据需要再次重启),这时候会发现数据又回来了
在这里插入图片描述

优点

 适合大规模的数据恢复
 对数据完整性和一致性要求不高更适合使用
 节省磁盘空间
 恢复速度快

缺点

 Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑
 虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

AOF(默认不开启)

以日志的形式来记录每次对数据的操作(增删改 读不算)到硬盘上。

AOF同步频率设置

appendfsync always
始终同步,每次Redis的写入都会立刻记入日志;性能较差但数据完整性比较好

appendfsync everysec
每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。

appendfsync no
redis不主动进行同步,把同步时机交给操作系统

AOF重写机制

当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩, 只保留可以恢复数据的最小指令集.

手动 : bgrewriteaof 命令

自动 :
根据auto-aof-rewrite-min-size和auto-aof-rewrite-percentage配置确定自动触发的时机。auto-aof-rewrite-min-size表示运行AOF重写时文件大小的最小值,默认为64MB;auto-aof-rewrite-percentage表示当前AOF文件大小和上一次重写后AOF文件大小的比值的最小值,默认为100。只用前两者同时超过时才会自动触发文件重写。

AOF持久化流程

(1)客户端的请求写命令会被append追加到AOF缓冲区内;
(2)AOF缓冲区根据AOF持久化策略[always,everysec,no]将操作sync同步到磁盘的AOF文件中;
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量;
(4)Redis服务重启时,会重新load加载AOF文件中的写操作达到数据恢复的目的
在这里插入图片描述

AOF的启动和数据正常备份恢复

打开配置文件conf 搜素 appendonly 改成yes打开配置文件 配置完记得重启不然不生效

重启之后AOF数据还是0,对应redis数据空
在这里插入图片描述

而AOF的数据恢复和RDB一模一样这里就不演示了

AOF数据异常恢复方式

1.set几个文件,这时候文件会进入aof
2.vi appendonly.aof 进入文件加入一个随便单词我这里加的是problem然后!wq退出,这时候关闭redis,重启一定会报错
在这里插入图片描述
在这里插入图片描述
这时候输入命令 redis-check-aof --fix appendonly.aof 修复一下aof 就可以正常启动了(rs是我自己配置的快捷启动redis服务器命令,这个不重要)
要看的话看我这个博客:https://blog.csdn.net/Andrew0219/article/details/120348010
注意:redis-check-aof 前面要加你自己的redis路径我是因为就在~路径下所以不用加
在这里插入图片描述

优点

 备份机制更稳健,丢失数据概率更低。
 可读的日志文本,通过操作AOF稳健,可以处理误操作。

缺点

 比起RDB占用更多的磁盘空间。
 恢复备份速度要慢。
 每次读写都同步的话,有一定的性能压力。
 存在个别Bug,造成恢复不能。

总结

官方推荐两个都启用。
如果对数据不敏感,可以选单独用RDB。
不建议单独用 AOF,因为可能会出现Bug。
如果只是做纯内存缓存,可以都不用。

性能建议

因为RDB文件只用作后备用途,建议只在Slave上持久化RDB文件,而且只要15分钟备份一次就够了,只保留save 900 1这条规则。
如果使用AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。
代价,一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。
只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。
默认超过原大小100%大小时重写可以改到适当的数值

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
RDBRedis Database)和AOF(Append-Only File)是Redis中两种常见的持久方式,它们有以下区别: 1. RDB持久RDB是将Redis数据库在某个时间点的数据快照保存到硬盘上的一种方式。它通过fork一个子进程来完成持久操作,首先将数据写入一个临时文件,然后用这个临时文件替换上一个RDB文件,从而实现数据持久RDB方式适合用于备份、灾难恢复数据库迁移等场景。 2. AOF持久AOF是通过将Redis的写命令追加到文件的末尾来记录数据库的操作Redis重启时,通过重新执行AOF文件中的命令来恢复数据库状态。相比于RDB方式AOF可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据AOF方式适合用于数据持久和实时备份等场景。 3. RDB的优点:RDB方式对于数据恢复速度较快,在大规模数据恢复时比AOF更高效。由于RDB是一个紧凑的二进制文件,相对于AOF文件来说更小,可以节省存储空间。此外,RDB方式Redis的性能影响较小。 4. AOF的优点:AOF方式可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据AOF文件是一个文本文件,易于理解和修改。 总结来说,RDB方式适合于备份和灾难恢复,而AOF方式适合于数据持久和实时备份。在选择持久方式时,需要根据实际需求进行权衡和选择。另外,也可以同时使用RDBAOF两种方式,以提供更好的数据安全性和灾难恢复能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Andrew0219

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

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

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

打赏作者

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

抵扣说明:

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

余额充值