RDB是什么?
在指定时间间隔内,将内存中的数据集快照写入硬盘,当要进行数据恢复时,将硬盘中的快照读入内存,以达到数据恢复的目的。
如何执行备份?
Redis会创建(fork)一个子线程来进行持久化,将数据写入一个临时文件中,当持久化操作完成之后,再将临时文件与上一次持久化文件进行替换。在这个过程中,主线程是不进行任何IO操作的,因此RDB的性能非常高。
Fork
Fork的作用是复制一个与当前进程一样的进程,新进程的所有数据与原进程一致,但是是一个全新的进程,并且会作为原进程的子进程。
redis配置文件中RDB的相关配置
设置RDB文件的名字
在redis配置文件redis.conf中修改dbfilename这一项的值即可,默认值是dump.rdb
修改RDB文件的保存位置
在redis.conf中找到dir项,修改其值即可
修改RDB自动保存策略
在redis.conf文件中找到快照的相关配置,默认的保存策略是1分钟改了10000次,五分钟改了10次,15分钟改了1次,只要满足其中之一,redis就会自动保存快照
策略设置格式:
save 秒钟 写操作次数
如果想禁用RDB,不设置save指令或给save传入空字符串即可。
stop-writes-on-bgsave-error
redis.conf中的stop-writes-on-bgsave-error设置为yes时,当redis无法写入硬盘,停止redis的写操作,推荐开启
rdbcompression 压缩文件
yes的话,redis将采用LZF算法对存储进硬盘的快照文件进行压缩,如果你不想消耗cpu来进行压缩的话,也可以设置为no
rdbchecksum 检查完整性
在存储快照之后,还可以让redis使用CRC64算法来进行数据校验
这样做会增加大约10%的性能消耗,根据具体需要来决定是否开启
rdb的相关命令
save:save命令可用于手动保存快照,但是当save时只管保存,其他全部阻塞,不建议使用该命令进行手动保存快照。
bgsave:redis会在后台异步进行快照操作,快照同时还可以响应客户端请求
lastsave:获取最后一次成功执行快照的时间
flushall:也会产生快照文件,但是里面是空的,毫无意义
动态停止RDB
在Linux控制台使用 redis-cli config set save "" 命令即可动态停止RDB
RDB的优势和劣势
优势
1.适合大规模的数据恢复
2.对数据完整性和一致性要求不高更适合使用
3.节省硬盘空间
4.恢复速度快
劣势
1.Fork的时候,内存的数据被克隆了一份,需要考虑内存的空间问题
2.虽然redis使用了写时拷贝技术,但是当数据量庞大时还是比较消耗性能
3.因为rdb每隔一段时间才做一次备份,如果redis意外down掉的话将会丢失最后一次快照后的所有修改