Redis数据持久化之RDB快照

导读:本篇文章讲解 Redis数据持久化之RDB快照,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. RDB快照简介

RDB快照是Redis数据持久化的一种方式,又称为Snapshot,默认情况下Redis在指定的时间间隔内将内存中的数据集快照写入磁盘,存放在副本文件中。当Redis重启后又自动读取到内存中。

Redis 使用操作系统的多进程机制来实现快照持久化:Redis 在持久化时,会调用 glibc 函数 fork 一个子进程,然后将快照持久化操作完全交给子进程去处理,而父进程则继续处理客户端请求。在这个过程中,子进程能够看到的内存中的数据在子进程产生的一瞬间就固定下来了,再也不会改变,也就是为什么 Redis 持久化叫做 快照。

2. 相关配置

Snapsho快照配置在redis.conf下的SNAPSHOTTING 的位置,如下:
在这里插入图片描述
下面是快照的一些默认配置:

save 900 1
save 300 10
save 60 10000

三个save相关的选项表示备份的频率,分别表示:

  1. 900秒(15分钟)内至少一个键被更改(增删改)则进行快照
  2. 300秒(5分钟)内至少10个键被更改则进行快照
  3. 60秒(1分钟)内至少10000个键被更改则进行快照

配置为save " "则停止了所有RDB保存规则。

stop-writes-on-bgsave-error yes

stop-writes-on-bgsave-error用于配置在快照创建出错后,是否继续执行写命令。这有利于用户及早发现快照保存失败,以免更多的数据不能持久化而丢失的风险。默认为yes,表示出错后就禁止数据的修改。

rdbchecksum yes

默认开启了rdbchecksum,rdbchecksum表示在存储快照后,redis使用CRC64算法来进行数据校验。这个操作会增加10%的性能消耗。如果希望获取最大的性能提升,改为no即关闭了此功能。

rdbcompression yes

rdbcompression用于配置是否对磁盘中的快照文件进行压缩存储。如果是的话,Redis就会采用LZF算法进行压缩。如果不想消耗CPU性能来进行压缩,可以设置为no关闭此功能。

dbfilename dump.rdb

dbfilename用于生成的快照文件的名字,默认为dump.rdb。

dir ./

dir用于配置生成的快照文件存储的位置,默认为./,即当前目录下。

3. 快照的触发方式

3.1 SAVE

SAVE命令:SAVE命令执行后,Redis开始执行备份操作,在备份操作执行完毕之前,将不再处理其他请求,其他请求将被挂起。

在 Redis 运行过程中,我们可以向 Redis 发送一条 SAVE命令来创建一个快照。但是需要注意,save 是一个阻塞命令,Redis 在收到 SAVE命令开始处理备份操作之后,在处理完成之前,将不再处理其他的请求。其他命令会被挂起,所以 SAVE使用的并不多。

127.0.0.1:6379> SAVE
OK

执行SAVE后查看redis安装目录即可以看到dump.rdb最后修改时间更新了。
在这里插入图片描述

3.2 BGSAVE命令

BGSAVE命令:BGSAVE命令会Fork一个子进程,然后这个子进程负责执行将快照写入硬盘,而父进程则继续处理客户端发来的请求,这样就不会导致客户端命令阻塞了。

127.0.0.1:6379> BGSAVE
Background saving started

Fork的作用是复制当前进程作为一个新的进程,新进程的所有数据(变量、环境变量、程序计数器等)数值都与原进程保持一致。但是是一个全新的进程,作为原进程的子进程。

3.3 配置文件中默认的快照配置

save 900 1
save 300 10
save 60 10000

当上面三个条件有一个满足时,例如在300秒内有十个key被操作了,redis就会自动触发BGSAVE命令进行备份。我们可以根据实际需求在redis.conf中自定义多个这种触发规则。

3.4 FLUSHALL命令

执行FLUSHALL命令,也会产生dump.rdb文件,但里面是空的,这样的操作没有意义。

3.5 SHUTDOWN命令

当我们用SHUTDOWN命令关闭Redis时,此时可以选择save或nosave参数,默认为不保存,选择save命令则进行备份操作,并在备份操作完成后将服务器关闭。

127.0.0.1:6379> shutdown save
not connected> exit

需要注意的是,如果前面已完成的保存操作,不会受到最后shutdown nosave操作的影响。

还有一种特殊情况也会触发BGSAVE命令,就是在主从备份的时候。当从机连接上主机后,会发送一条sync命令来开始一次复制操作,此时主机会开始一次BGSAVE操作,并在BGSAVE操作结束后向从机发送快照数据实现数据同步。

4. 快照数据恢复

将备份文件(dump.rdb)移动到redis安装目录后,启动Redis服务即自动读取该备份文件。获取 redis 安装目录可以使用 CONFIG 命令,如下所示:

127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/bin"

5. 停止快照

执行以下命令即 清除RDB保持规则,也可以在配置文件中进行修改,如下:

127.0.0.1:6379> CONFIG SET save ""

6. 快照的优点和缺点

  • 优点:
    适合大规模的数据恢复,对数据完整性和一致性要求不高。
  • 缺点:
  1. SAVE命令会发生阻塞,BGSAVE虽然不会发生阻塞,但是Fork一个子进程又要耗费资源,如果数据集很大,Fork可能会很耗时,如果CPU性能不好的话,可能会导致Redis在几毫秒甚至一秒钟内停止为客户端提供服务。
  2. 定期的持久化也会让我们存在数据丢失的风险,最坏的情况我们可能丢失掉最近一次需要备份的数据,具体丢失多久的数据,要看我们项目的承受能力,我们可以根据项目的承受能力修改save参数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/44351.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!