RDB持久化是如何实现的?

Redis的RDB持久化通过保存内存中数据到磁盘来防止数据丢失。RDB文件是经过压缩的二进制文件,可以通过SAVE或BGSAVE命令创建,后者在后台执行以避免阻塞服务。服务器启动时会自动载入RDB。自动持久化可通过配置save选项,如在指定时间内满足修改次数条件,自动触发BGSAVE。在执行BGSAVE期间,不能同时执行SAVE,以避免竞争条件。
摘要由CSDN通过智能技术生成

因为redis是将数据保存在内存中行操作的,一旦服务器进程退出,其中的数据就会消失不见了。如何解决这样的问题,我们可以将内存中的数据保存在磁盘中,这样就能避免数据意外丢失了。

Redis提供RDB持久化功能,将redis存在内存中的数据保存在磁盘中去。

  • RDB持久化可以手动完成,也可以根据服务器配置选项定期执行
  • 经过持久化保存后,会形成一个经过压缩的二进制文件,RDB文件。也可以使用RDB文件还原数据库的状态。
  1. RDB的创建
    使用两个命令可以生成RDB文件,SAVE和BGSAVE

两个命令的区别是

  • SAVE命令会阻塞redis服务进程,直到RDB文件创建完成,很明显的缺点就是,在这期间,服务器不能处理任何命令请求。
  • BGSAVE会创建一个子进程,子进程会帮我们创建RDB文件,父进程(服务进程)会继续处理请求。
  1. RDB的载入
  • redis服务进程启动的时候就会自动载入RDB,无需人为干预(也没有特定的命令让redis载入RDB)

载入时,会先判断数据库是否AOF持久化。
AOF持久化也是将数据保存在磁盘中,但保存的数据不是真实的数据,而是redis执行命令。

Created with Raphaël 2.2.0 服务器启动 执行载入程序 是否开启AOF持久化功能? 载入AOF文件 载入RDB文件 yes no

注意:

  • 在执行BGSAVE期间,不能执行SAVE命令,即不能同时执行两个命令,目的是避免父进程和子进程同时执行两个rdbSave调用,防止产生竞争条件。也不能同时执行两个BGSAVE命令。
  • 服务器在载入RDB文件期间,会一直处于阻塞状态,直到载入工作完成为止。

是否可以自动RDB持久化?当然

  • 自动间隔性保存,BGSAVE是创建子进程进行保存得,那么我们可以配置服务器的save选项,让服务器每隔一段时间进行自动BGSAVE保存。
  1. 设置多个save保存条件,满足其一就可以执行BGSAVE。如下列表(saveparams数组)是保存选项
saveParam[0]saveParam[1]saveParam[2]
900seconds300seconds60seconds
1 changes10 changes10000changes
  • 在900秒内,对数据库至少修改了1次
  • 在300秒内,对数据库至少修改了10次
  • 在60秒内,对数据库至少修改了10000次
    只要满足其一,就会执行BGSAVE命令
    Redis的服务器周期性操作函数serverCron默认每隔100毫秒执行一次,对数据库进行维护,其中一项工作就是检查save选项所设置的保存条件是否已经满足,如果满足就会执行BGSAVE命令
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值