Redis 持久化

介绍

Redis持久化有两种方式:快照持久化(RDB)、AOF持久化。

快照持久化RDB

快照持久化,顾名思义,就是通过拍摄快照的方式实现数据的持久化,redis可以在某个时间点对内存中的数据创建一个副本文件,副本文件中的数据在redis重启时会被自动加载,我们也可以将副本文件拷贝到其他地方一样可以使用。

如何快照持久化

在redis中快照持久化是默认存在的,我们可以修改redis.conf对持久化配置进行自定义配置。

1.redis.conf快照持久化默认配置

在这里插入图片描述
前面三个 save 相关的选项表示备份的频率,分别表示 900 秒内至少一个键被更改则进行快照,300 秒内至少 10 个键被更改则进行快照,60 秒内至少 10000 个键被更改则进行快照, stop-writes-on-bgsave-error 表示在快照创建出错后,是否继续执行写命令, rdbcompression 则表示是否对快照文件进行压缩, dbfilename 表示生成的快照文件的名字,dir 则表示生成的快照文件的位置,在 redis 中,快照持久化默认就是开启的。

2.快照持久化演示
  • 1.进入redis目录,如果有dump.rdb文件,先将之删除
    在这里插入图片描述
  • 2.启动redis,随便在redis中存储几个数据,然后关闭redis并退出。
[root@dpf redis-5.0.7]# redis-server redis.conf 
13905:C 10 Feb 2020 16:00:41.996 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
13905:C 10 Feb 2020 16:00:41.997 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=13905, just started
13905:C 10 Feb 2020 16:00:41.997 # Configuration loaded
[root@dpf redis-5.0.7]# redis-cli 
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379> SHUTDOWN
not connected> exit
  • 3.退出之后,你会发现刚刚删除的dump文件又回来了,这就是生成的备份文件。
  • 4.此时再次启动 redis 并进入,发现刚刚存储的数据都还在,这是因为 redis 在启动时加载了 dump.rdb 中的数据。好了,关闭 redis 并退出。
  • 5.将 redis 目录下的 dump.rdb 文件删除。
  • 6.再次启动 redis 并进入到控制台,所有的数据都不存在了。
如何触发快照持久化
  • 命令save
    save 是一个阻塞命令,redis 在接收到 save 命令之后,开始执行备份操作之后,在备份操作执行完毕之前,将不再处理其他请求,其他请求将被挂起,因此这个命令我们用的不多(只管保存,其它不管,全部阻塞)。
  • 命令bgsave
    不同于 save 命令,bgsave 命令会 fork 一个子进程,然后这个子进程负责执行将快照写入硬盘,而父进程则继续处理客户端发来的请求,这样就不会导致客户端命令阻塞了。
  • 执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义。
  • 执行命令shutdown时会触发save命令进行持久化快照。
如何停止

动态所有停止RDB保存规则的方法:redis-cli config set save "",其实就是修改redis.conf中的如下配置。
在这里插入图片描述

优缺点
优点

适合大规模的数据恢复(对数据完整性和一致性要求不高)

缺点

在一定间隔时间做一次备份,所以如果redis意外down掉的话,就
会丢失最后一次快照后的所有修改
Fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑

AOF持久化

AOF持久化是以日志的形式将Redis执行过的所有命令都记录到.aof文件(除读操作外),该文件只允许追加不允许修改。在恢复时只需要将文件从头到尾执行一遍即可恢复数据。AOF默认不开启,需要手动开启。

开启AOF持久化

修改redis.conf文件中的"appendonly no"中的no为yes
appendonly no
另外几个和 AOF 相关的属性如下:

appendfilename "appendonly.aof"
# appendfsync always
appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

这几个属性的含义分别如下:

1.appendfilename 表示生成的 AOF 备份文件的文件名。
2.appendfsync 表示备份的时机,always 表示每执行一个命令就备份一次,everysec 表示每秒备份一次,no 表示将备份时机交给操作系统。
3.no-appendfsync-on-rewrite 表示在对 aof 文件进行压缩时,是否执行同步操作。
4.最后两行配置表示 AOF 文件的压缩时机,这个我们一会再细说。

恢复
正常恢复

这种恢复情况只要开启了AOF持久化,只要重启就会自动恢复。

appendonly.aof文件损坏恢复

当你在appendonly.aof中添加一些其他内容,.aof文件就相当于损坏了,当你重启时就会产生异常而不能启动。
在这里插入图片描述
在这里插入图片描述
这时候使用命令:redis-check-aof --fix 文件 进行恢复
在这里插入图片描述

aof文件重写压缩

AOF 备份有很多明显的优势,当然也有劣势,那就是文件大小。随着系统的运行,AOF 的文件会越来越大,甚至把整个电脑的硬盘填满,AOF 文件的重写与压缩机制可以在一定程度上缓解这个问题。
当 AOF 的备份文件过大时,我们可以向 redis 发送一条 bgrewriteaof 命令进行文件重写,如下:

127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started
(0.71s)

bgrewriteaof 也可以自动执行,自动执行时间则依赖于 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 配置,auto-aof-rewrite-percentage 100 表示当目前 aof 文件大小超过上一次重写时的 aof 文件大小的百分之多少时会再次进行重写,如果之前没有重写,则以启动时的 aof 文件大小为依据,同时还要求 AOF 文件的大小至少要大于 64M(auto-aof-rewrite-min-size 64mb)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值