redis持久化之RDB(Redis DataBase)

1 : 总体介绍

Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢 失。

Redis的数据也支持写到硬盘中,这个过程就叫做持久化

1.1 。 Redis提供了2种不同形式的持久化方式。
  1. RDB(Redis DataBase)
  2. AOP(Append Of File)

2 : RDB是什么?

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

3 : 备份是如何执行的

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

4 : Fork

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

  1. 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调
    用,处于效率考虑,linux中引入了"写时复制技术"

  2. 一般情况父进程和子进程会共用一段物理内存,只有进程空间的各段的内容要发生变化时,才会将 父进程的内容复制一份给子进程。

5 : RDB持久化流程

6 : 指定备份文件的名称

在redis.conf中,可以修改rdb备份文件的名称,默认为dump.rdb,如下:

7 : 指定备份文件存放的目录

在redis.conf中,rdb文件的保存的目录是可以修改的,默认为Redis启动命令所在的目录,如下 😊

8 : 触发RDB备份

方式1 : 自动备份,需配置备份规则

可在redis.conf中配置自动备份的规则,默认规则如下:

注 Redis 7 版本以后配置文件

注 : redis 7版本之前配置文件

save用来配置备份的规则

save的格式: save 秒钟 写操作次数

默认是1分钟内修改了1万次,或5分钟内需修改了10次,或30分钟内修改了1次。

示例:设置20秒内有最少有3次key发生变化,则进行备份

javascript 复制代码
save 20 3

方式2 : 手动执行命令备份(save | bgsave)

  1. 有2个命令可以触发备份。
  2. save:save时只管保存,其他不管,全部阻塞,手动保存,不建议使用。
  3. bgsave:redis会在后台异步进行快照操作,快照同时还可以响应客户端情况。
  4. 可以通过 lastsave 命令获取最后一次成功生成快照的时间。

方式3 : flushall命令

执行flushall命令,也会产生dump.rdb文件,但里面是空的,无意义。

9 : redis.conf 其他一些配置

stop-writes-on-bgsave-error:当磁盘满时,是否关闭redis的写操作

stop-writes-on-bgsave-error用来指定当redis无法写入磁盘的话,是否直接关掉redis的写操作, 推荐yes。

10 : rdbcompression:rdb备份是否开启压缩

对于存储到磁盘中的rdb快照文件,可以设置是否进行压缩,如果是的话,redis会采用LZF算法进 行压缩。 如果你不想小号CPU来进行压缩的话,可以设置为关闭此功能,推荐yes。

11 : rdbchecksum:是否检查rdb备份文件的完整性

存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能 消耗,如果希望获取最大的性能提升,可以关闭此功能。 推荐yes。

12 : rdb的备份和恢复

1 先通过config get dir 查询rdb文件的目录
2 然后将rdb的备份文件 *.rdb 文件拷贝到别的地方
javascript 复制代码
cp dump.rdb dump2.rdb
3 rdb的恢复
  1. 关闭redis
  2. 先把备份的文件拷贝到工作目录 cp dump2.rdb dump.rdb
  3. 启动redis,备份数据直接加载,数据被恢复

优势 :

1. 适合大规模数据恢复
2. 对数据完整性和一致性要求不高更适合使用
3. 节省磁盘空间
4. 恢复速度快

劣势 :

1. Fork的时候,内存中的数据会被克隆一份,大致2倍的膨胀,需要考虑
2. 虽然Redis在fork的时候使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能
3. 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down的话,就会丢失最后一次快照后所有修改

13 、如何停止RDB?

动态停止RDB: redis-cli config set save "" #save后给空值,表示禁用保存策略

相关推荐
学传打活14 小时前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng1688 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心11 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552716 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552717 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝18 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552718 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552719 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u01030552721 天前
Java实用类应用精讲
人工智能·1024程序员节
u01030552722 天前
Java I/O核心操作实战
人工智能·1024程序员节