Redis 中的 持久化 RDB持久化 SAVE:阻塞服务器并创建RDB文件 BGSAVE:以非阻塞方式创建RDB文件 通过配置选项自动创建RDB文件

Redis的RDB持久化包括SAVE和BGSAVE命令,SAVE会阻塞服务器创建RDB文件,而BGSAVE以非阻塞方式创建。用户还可以通过配置选项让服务器在满足特定条件时自动执行BGSAVE,以实现数据持久化。RDB文件结构包括标识符、版本号、数据库数据等7个部分,其载入过程涉及校验和检查和数据库重建。在停机时,SAVE可能导致更多数据丢失,而BGSAVE相对较优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

15.1 RDB持久化

        RDB持久化是Redis默认使用的持久化功能该功能可以创建出一个经过压缩的二进制文件其中包含了服务器在各个数据库中存储的键值对数据等信息RDB持久化产生的文件都以.rdb后缀结尾,其中rdb代表 Redis DataBase(Redis数据库)。

        Redis提供了多种创建RDB文件的方法,用户既可以使用SAVE命令或者 BGSAVE命令手动创建RDB文件也可以通过设置save配置选项让服务 器在满足指定条件时自动执行BGSAVE命令。本节接下来将分别介绍这 3种RDB文件的创建方法。

15.1.1 SAVE:阻塞服务器并创建RDB文件

        用户可以通过执行SAVE命令,要求Redis服务器以同步方式创建出一个记录了服务器当前所有数据库数据的RDB文件。SAVE命令是一个无参数命令,它在创建RDB文件成功时将返回OK作为结果

在这里插入图片描述

        接收到SAVE命令的Redis服务器将遍历数据库包含的所有数据库,并将各个数据库包含的键值对全部记录到RDB文件中在SAVE命令执行期间,Redis服务器将阻塞直到RDB文件创建完毕为止。如果Redis服务器在执行SAVE命令时已经拥有了相应的RDB文件,那么服务器将使用新创建的RDB文件代替已有的RDB文件,这个过程如图15-1所示。

在这里插入图片描述

其他信息

        复杂度:O(N),其中N为Redis服务器所有数据库包含的键值对总数量。

        版本要求:SAVE命令从Redis 1.0.0版本开始可用。

15.1.2 BGSAVE:以非阻塞方式创建RDB文件

        因为SAVE命令在执行时会阻塞整个服务器,所以用户在使用该命令创 建RDB文件期间将无法为其他客户端提供服务。为了解决这个问题, Redis提供了SAVE命令的异步版本BGSAVE命令:这个命令与SAVE命令一样都是无参数命令,它与SAVE命令的不同之处在于,BGSAVE不会直接使用Redis服务器进程创建RDB文件,而是使用子进程创建RDB文件。

        当Redis服务器接收到用户发送的BGSAVE命令时,将执行以下操作:

        1)创建一个子进程。

        2)子进程执行SAVE命令,创建新的RDB文件。

        3)RDB文件创建完毕之后,子进程退出并通知Redis服务器进程(父进程)新RDB文件已经完成。

        4)Redis服务器进程使用新RDB文件替换已有的RDB文件。

        图15-2展示了这一执行过程。

        因为BGSAVE命令创建RDB文件的操作是由子进程以异步方式执行的, 所以当用户在客户端执行这个命令时,服务器将立即向客户端返回 OK然后才会在后台开始具体的RDB文件创建操作:

在这里插入图片描述

        因为BGSAVE命令是以异步方式执行的,所以Redis服务器在BGSAVE 命令执行期间仍然可以继续处理其他客户端发送的命令请求。不过需要注意的是,虽然BGSAVE命令不会像SAVE命令那样一直阻塞Redis服务 器,但由于执行BGSAVE命令需要创建子进程,所以父进程占用的内存 数量越大,创建子进程这一操作耗费的时间也会越长,因此Redis服务器在执行BGSAVE命令时,仍然可能会由于创建子进程而被短暂地阻塞。

其他信息

 &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值