Redis重制(十五)redis持久化RDB

9 阅读3分钟

Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘,那么一旦服务器进程退出,服务器中的数据库状态也会消失。所以Redis提供了持久化功能!

 

在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。

 

Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程中,主进程是不进行任何○操作的。这就确保了极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。

 

大部分情况下,我们使用的是RDB。

 

1 :Rdb保存的文件是dump.rdb,可以在redis.conf中配置。

1.jpg


2 :RDB在redis.conf中的配置项:

持久化,在规定的时间内,执行了多少次操作。

(1):save 3600 1 300 100 60 10000

简单解释一下上方的命令:

3600秒内有一次key修改,就重新生成一次RDB文件。

300秒内有100次key修改,就重新生成一次RDB文件。

60秒内有10000次修改,就重新生成一次RDB文件。

2.jpg

 

(2):stop-writes-on-bgsave-error yes

持久化出错redis还是否工作。

 

(3):rdbcompression yes

是否压缩rdb文件,需要消耗cpu资源

 

(4):rdbchecksum yes

保存RDB文件,进行错误校验

3.jpg

 

(5):dir ./

Rdb文件保存目录

4.jpg

 

(6):rdb-del-sync-files:控制着在主从复制(replication)场景下,从节点(slave)对于用于同步的RDB文件的处理方式。


(7):关闭RDB

在redis.conf中配置

save ""

 

3 :RDB文件触发机制:

1:redis.conf中配置的规则

2: save的规则满足的情况下,会自动触发rdb规则(不建议使用)

3:执行flushall命令,也会触发我们的rdb规则(这个文件毫无意义)

4:退出redis(shutdown),也会产生rdb文件!

 

4 :如何恢复rdb文件:

这个就很简单了:

只需要将rdb文件放在我们redis)启动目录就可以,redis启动的时候会自动检查dump.rdb恢复其中的数据.

那我们如何知道rdb备份文件生成在哪里呢?

127.0.0.1:6379> config get dir

  1. "dir"

  2. "/usr/local/bin"

 

5 :检查修复RDB文件

有一种比较特殊的情况,redis在执行rdb备份的时候,服务器突然断电了。导致rdb没有完全备份完成。我们该如何检查修复这个rdb文件呢?

在我们的redis安装目录下有一个redis-check-rdb文件

5.jpg

 

6 :RDB的优缺点(这是一道经典面试题)

优点:

1、适合大规模的数据恢复!

2、对数据的完整性要不高!

缺点:

1、需要一定的时间间隔进程操作!如果redis意外宕机了,这个最后一次修改数据就没有的了!

2、在数据量比较大的时候,每次备份fork子进程可能会使服务停止几百毫秒,甚至一秒。

 

最后:一个小的知识点。关闭RDB备份,仍然可以使用save/bgsave命令生成rdb文件

 

以上大概redis中RDB备份的基本使用。

 

有好的建议,请在下方输入你的评论。