【redis深层次探索】RDB持久化

一、说明

因为Redis是内存数据库, 它将自己的数据库状态储存在内存里面, 所以如果不想办法将储存在内存中的数据库状态保存到磁盘里面, 那么一旦服务器进程退出,服务器中的数据库状态也会消失不见。

为了解决这个问题, Redis提供了RDB持久化功能, 这个功能可以将Redis在内存中的数据库状态保存到磁盘里面, 避免数据意外丢失。

RDB持久化既可以手动执行, 也可以根据服务器配置选项定期执行, 该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。

RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件, 通过该文件可以还原生成RDB文件时的数据库状态。

因为RDB文件是保存在硬盘里面的, 所以即使Redis服务器进程退出, 甚至运行Redis服务器的计算机停机, 但只要RDB文件仍然存在, Redis服务器就可以用它来还原数据库状态。

二、RDB文件的创建和载入

有两个Redis命令可以用于生成RDB文件, 一个是SAVE, 另一个是BGSAVE。

SAVE命令会阻塞Redis服务器进程, 直到RDB文件创建完毕为止, 在服务器进程阻塞期间, 服务器不能处理任何命令请求。

和SAVE命令直接阻塞服务器进程的做法不同, BGSAVE命令会派生出一个子进程, 然后由子进程负责创建RDB文件, 服务器进程( 父进程) 继续处理命令请求。

另外值得一提的是, 因为AOF文件的更新频率通常比RDB文件的更新频率高, 所以:

  • 如果服务器开启了AOF持久化功能, 那么服务器会优先使用AOF文件来还原数据库状态。
  • 只有在AOF持久化功能处于关闭状态时, 服务器才会使用RDB文件来还原数据库状态。

用户可以通过save选项设置多个保存条件, 但只要其中任意一个条件被满足,服务器就会执行BGSAVE命令。
举个例子, 如果我们向服务器提供以下配置:
save 900 1
save 300 10
save 60 10000
那么只要满足以下三个条件中的任意一个, BGSAVE命令就会被执行:

  • 服务器在900秒之内, 对数据库进行了至少1次修改。
  • 服务器在300秒之内, 对数据库进行了至少10次修改。
  • 服务器在60秒之内, 对数据库进行了至少10000次修改。

三、总结

  • RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据。
  • SAVE命令由服务器进程直接执行保存操作, 所以该命令会阻塞服务器。
  • BGSAVE令由子进程执行保存操作, 所以该命令不会阻塞服务器。
  • 服务器状态中会保存所有用save选项设置的保存条件, 当任意一个保存条件被满足时, 服务器会自动执行BGSAVE命令。
  • RDB文件是一个经过压缩的二进制文件, 由多个部分组成。
  • 对于不同类型的键值对, RDB文件会使用不同的方式来保存它们。

参考资料:《redis设计与实现》

上一篇:【redis深层次探索】数据结构和对象【七】-- 对象
下一篇:【redis深层次探索】AOF持久化
                                                                                    不积跬步,无以至千里;不积小流,无以成江海!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值