天天看点

Redis学习(五) -- Redis持久化一、RDB二、AOF

Redis学习 -- Redis持久化

  • 一、RDB
    • 1、什么是RDB
    • 2、怎么使用RDB
    • 3、RDB的触发机制
    • 4、RDB如何恢复数据
    • 5、优缺点
  • 二、AOF
    • 1、什么是AOF
    • 2、AOF的配置
    • 3、AOF的使用

一、RDB

1、什么是RDB

RDB会在指定的时间间隔内将内存中的数据集 快照写入磁盘,恢复时是将快照文件直接读到内存中。

RDB保存的是 dump.rdb

2、怎么使用RDB

Redis中是默认开启RDB的,我们可以在配置文件中看到RDB是如何生效的:

Redis学习(五) -- Redis持久化一、RDB二、AOF
Redis学习(五) -- Redis持久化一、RDB二、AOF

这里我们可以看到,配置文件中默认的,就是在900秒内如果有一个key的改动,就会写入到rdb快照中,我们就来测一下:

Redis学习(五) -- Redis持久化一、RDB二、AOF
Redis学习(五) -- Redis持久化一、RDB二、AOF

我们发现,果然有了一个dump.rdb的文件,说明已经持久化成功了。后期呢,我们可以根据自己的需要来自定义,比如说在 60s内有1000个key的改动,才会写入RDB中等待。

然后呢,我们现在来模拟下,现在k1这个key已经持久化了,那么我们这时将redis服务关停,然后再次启动,模拟服务突然宕机,看能否恢复数据?

Redis学习(五) -- Redis持久化一、RDB二、AOF

现在我们已经关掉了redis,然后接着我们启动redis:

Redis学习(五) -- Redis持久化一、RDB二、AOF

现在启动成功,那我们看下,redis中是否有k1这个数据呢?

Redis学习(五) -- Redis持久化一、RDB二、AOF

我们发现,数据依然存在,说明持久化亦然生效!

3、RDB的触发机制

触发机制:

  1. 配置文件中配置的save规则满足的条件下,会自动触发RDB
    Redis学习(五) -- Redis持久化一、RDB二、AOF
  2. 执行flushall命令来清空所有redis数据库的数据时,也会触发RDB:
    Redis学习(五) -- Redis持久化一、RDB二、AOF
    这里我们使用flushall清空了redis,然后我们看是否生成了dump.rdb文件:
    Redis学习(五) -- Redis持久化一、RDB二、AOF
    生成了!
  3. 关闭redis服务的时候,也会产生RDB文件
    Redis学习(五) -- Redis持久化一、RDB二、AOF
    我们使用shutdown关闭了redis服务,然后看是否生成了dump.rdb:
    Redis学习(五) -- Redis持久化一、RDB二、AOF
    依旧生成了。

4、RDB如何恢复数据

很简单,只需要将rdb文件放入我们redis的启动目录下就行,redis启动的时候回自动检查dump.rdb文件,并恢复其中的数据。

那我们如何方便的查看dump.rdb放置的位置呢?

127.0.0.1:6379> config get dir # 这个命令就可以查看rdb文件要放置的位置,下面返回的/usr/local/bin目录就是rdb文件要放置的目录
1) "dir"
2) "/usr/local/bin"

           

5、优缺点

优点:

  • 适合大规模的数据恢复;
  • 对数据的完整性要求不高。

缺点:

  • 需要一定的时间间隔进行操作,如果redis意外宕机了,这个最后一次修改的数据就会没有;
  • fork进程的时候,会占用一定的内存空间。

二、AOF

1、什么是AOF

AOF就是将我们的所有操作都记录下来,要恢复的时候使用这个文件重新执行一遍。

以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(只记录写操作)。

2、AOF的配置

Redis学习(五) -- Redis持久化一、RDB二、AOF

我们一般用AOF的话,只将appendonly改为yes,即开启AOF即可。

3、AOF的使用

现在我们将上面说的那个配置改为yes,开启AOF,并重启redis服务。

Redis学习(五) -- Redis持久化一、RDB二、AOF

然后我们现在就在redis中写入一些数据:

Redis学习(五) -- Redis持久化一、RDB二、AOF

然后再打开那个aof文件看下:

Redis学习(五) -- Redis持久化一、RDB二、AOF

我们发现,aof已经记录了我们的写操作的命令了!

那如果这个aof文件有损坏怎么办呢?

这时我们可以使用redis自带的工具来修复aof文件:

redis-check-aof --fix [要修改的文件]