Redis 共提供了两种不同形式的持久化方式
- RDB( redis database )
- AOF( append of file )
方式1:RDB
简介
在指定的时间间隔内,将内存中的数据集快照写入磁盘中,也就是“快照”。
从“快照”恢复的时候,是将快照文件直接读取到内存中如何执行备份
RDB会单独创建一个子进程(fork进程)来进行数据的持久化操作,首先会将数据写入到一个临时文件中,然后等到持久化过程都结束后,再将这个临时文件去替换掉上一次持久化的文件。在整个过程中,主进程是不进行任何的IO操作的,这也就确保了极高的性能。如果需要大规模的恢复数据,且对数据的完整性没有很大的要求,那么RDB方式会比AOF方式更加的高效。其缺点就在于最后一次持久化操作的数据可能会丢失。
Fork
- Fork的作用:复制一个和当前进程一样的进程,新进程的所有数据(变量、环境变量、计数器等)都和原来的进程保持一致,但是是一个全新的进程,并且作为原进程的子进程。
- 一般情况下,父进程和子进程会共用同一段物理内存,只有当进程空间的各段内容发生变化的时候,才会将父进程的内容复制一份,提供给子进程。
持久化流程图
dump.rdp文件
在redis.conf
中配置文件的名称,默认为:dump.rdp
此文件默认在 redis 启动的目录下
save && bgsave
- save:只管保存,其他不管,全部阻塞。
- bgsave:redis 会在后台异步进行快照操作,快照的同时还可以处理客户端的请求。
可以通过
lastsave
命令来获取上一次执行快照的时间。优势
适合大规模的数据恢复
- 对数据完整性和一致性要求不高的时候适合使用(最后一次保存的数据容易丢失)
- 可以节省磁盘空间
- 恢复速度很快(从内存中恢复)