Redis持久化之-RDB
Redis 提供了2个不同形式的持久化方式。
- RDB(Redis DataBase)
- AOF(Append Of File)
简介
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,它恢复时将快照文件直接读到内存里。
Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量‘程序计数器等)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。
rdb模式默认是开启的
RDB相关的配置
快照临时文件的保存位置,默认在哪个路径下启动的redis,临时文件就在哪,同时文件名默认为dump.rdb。也可以修改文件路径和文件名

save

默认触发时间,分别表示 3600 秒(60 分钟)内有 1 个更改,300 秒(5 分钟)内有 100 个更改以及 60 秒内有 10000 个更改,当有一个条件满足就会触发快照。
如果想禁用RDB持久化策略,只要不设置任何save指令,或者给save传入一个空字符串参数也可以。
Stop-writes-on-bgsave-error
TIP
默认是yes,如果配置成no,表示不在乎数据不一致或者有其他的手段发现和控制。
rdbcompression
TIP
默认是yes
rdbcompression:对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果不想消耗CPU来进行压缩的话,可以设置为no关闭此功能。
rdbchecksum
TIP
默认是yes
rdbchecksum:在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增大大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。
如何触发RDB快照
配置文件中默认的快照配置,当满足快照触发的时间和操作次数。就会触发快照。其实也是执行
bgsave只不过是服务器自动执行如果想马上触发快照,使用
save或bgsave,save时只管保存,其他不管,全部阻塞,直到RDB文件创建完毕为止,在整个RDB文件生成过程中服务器不能处理任何命令请求。bgsave时Redis会在后台异步进行快照操作,快照操作同时还可以响应客户端请求。可以通过lastsave命令获取最后一次成功执行快照的时间。执行
flushall命令也会触发快照,先清空内存,然后再快照。所以生成的dump.rdb文件是空的。

恢复数据
redis启动默认会将dump.rdb文件读到内存中,所以只要保证dump.rdb数据就可以了
优势和劣势
优势:
- 适合大规模的数据恢复
- 对数据完整性和一致性要求不高
劣势:
- 在一定间隔时间做一次快照,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改。
- Fork的时候,内存中的数据被克隆了一份,大约2倍的膨胀性需要考虑。