Redis持久化之RDB学习笔记

一、Redis持久化之RDB(Redis DataBase)

1.1 概念

​ RDB指在指定的时间间隔将内存中的数据集快照写入磁盘,恢复时是将快照文件直接读取到内存里

1.2 备份如何执行

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

image-20211014143112600

1.3 Fork

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

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

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

1.4 dump.rdb文件

​ 可以在redis.conf中配置文件名称,默认为dump.rdb,通过vi打开配置文件,输入/dbfilename可以搜索到这条配置信息

image-20211014143359143

下方的dir表示文件生成在哪个目录,./表示生成在启动目录下

image-20211014143538619

image-20211014143653960

stop-writes-on-bgsave-error表示当Redis无法写入磁盘时,比如硬盘已经满了等情况,直接关闭Redis的写操作,推荐使用yes

image-20211014143857766

rdbcompression表示设置对存储到磁盘中的快照是否压缩存储,如果yes则使用LZF算法进行压缩

image-20211014144204287

rdbchecksum表示进行完整性检查,在存储快照后,redis使用CRC64算法来进行数据校验,但是会增加大约10%的性能消耗

image-20211014144027525

save是用来在指定的时间间隔内将内存中的数据集快照写入磁盘,格式为 save 秒 写操作次数

默认有三种,第一种是15分钟内做了一次修改操作,第二种是在五分钟内做了五次修改操作,第三种是一分钟内做了一万次修改操作。

image-20211014194957728

如设置save 20 3,则表示在20秒内做了3次修改操作会自动将数据集快照写入磁盘

image-20211014195156104

注释save指令或给save传入空字符串都可以禁用

1.5 RDB优势

(1)适合大规模的数据恢复

(2)对数据完整性和一致性要求不高更适合使用

(3)节省磁盘空间

(4)恢复速度快

1.6 劣势

(1)Fork会克隆一份内存中的数据,体积会膨胀2倍

(2)虽然Redis在fork时使用了写时拷贝技术,但是如果数据庞大会十分消耗性能

(3)如果redis意外down掉,会丢失最后一次快照后的所有修改:因为save操作是在一定时间间隔内做多少次操作才会触发,如果在时间段内的操作还没有达到设定的次数就崩溃了,会导致本次的所有操作没有进行持久化操作,修改就会丢失

猜你喜欢

转载自blog.csdn.net/weixin_42195126/article/details/120772053