Redis-持久化-RDB
1,是什么
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,
它恢复时是将快照直接读取到内存中
2,备份是如何执行的
Redis会单独创建( fork )一个子进程来进行持久化,会先将数据写入到一个临时文件中,待持久化过程都结束了,
再用这个临时文件提换上次持久化好的文件,整个过程中,主进程是不进行任何I/O 操作的,这就确保了极高的性能,
如果需要进行大规模数据的恢复,且对于数据恢复的完整不是非常敏感,那RDB 比 AOF 方式更加高效,
RDB 的缺点是最后一次备份的数据可能丢失
3, fork
》fork的作用是复制一个与当前进程一样的进程,新进程的所有数据( 变量、环境变量、程序计数器等 )数值都和原进程一致,
但是是一个全新的进程,并作为原进程的子进程
》在 Linux 程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会被 exec 系统调用,处于效率考虑,
Linux 中引入了“ 写时复制技术 ”
》一般情况下,子进程和父进程会共用同一段物理内存,只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。
4,默认备份文件 dump.rdb
在 redis.conf 中配置文件中,
文件储存路径,启动目录
stop-writes-on-bgsave-error Redis无法写入磁盘中,直接关掉redis的写操作,推荐 yes
rdbcompression 压缩文件
对于储存到磁盘中的快照,可以设置是否进程压缩储存,如果是的话,redis 会采用 LZF 算法 进行压缩
如果你不想消耗CPU进行压缩的话,可以设置关闭此功能,推荐 yes
rdbchecksum 检查完整性
在储存快照后,可以让Redis使用 CRC64 算法来进行数据校验。
但这样做大约会增加10%的性能消耗,如果需要获得最大的性能提升,可以关闭此功能,推荐yes
save
格式:save 秒钟 写操作次数
RDB 是整个内存的压缩过的 Snapshot,RDB的数据结构,可以配置复合的快照触发条件
默认是1分钟内改了一万次,或5分钟内改了10次,或15分钟内改了1次
禁用
不设置 save 指令,或者给 save 指令传入空字符串
bgsave
Redis会在后台异步进行快照操作,快照同时还可以相应客服端请求。
5, RDB备份优势
1)适合大规模的数据恢复
2)对数据完整性和一致性要求不高更适合使用
3)节省磁盘空间
4)恢复速度快
6,RDB备份缺点
1),fork的时候,内存的数据被克了一份,大致2倍的膨胀性需要考虑。
2)虽然Redis在 Fork 的时候使用了 写时拷贝技术,但是如果数据庞大时还是比较消耗性能。
3)在备份周期在一定时间间隔做一次备份,所以如果 Redis意外 down 掉的话,就会丢失最后一次快照的所有修改。