Redis 数据持久化
- RDB 全称redis database,在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时 直接将快照文件直接读到内存里
- Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到一个临时文件中,主进程是不进行任何IO操作的
- Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等)数值都和原进程一 致,但是是一个全新的进程,并作为原进程的子进程
生成RDB文件保存数据到磁盘
手动促发
save redis 127.0.0.1:6379> SAVE 返回 OK
bgsave LASTSAVE 命令 查看是否成功
bgsave 只有fork子进程时会阻塞服务器,子进程遍历整个内存,是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。
save;整个过程会阻塞服务,已被弃用
save m n
save m n的含义:当时间到m秒时,如果redis数据发生了至少n次变化,则执行bgsave;
RDB实际是在Redis内部一个定时器事件,每隔固定时间去检查当前数据发生的改变次数与时间是否满足配置的持久化触发的条件,如果满足则通过操作系统fork调用来创建出一个子进程,这个子进程默认会与父进程共享相同的地址空间,这时就可以通过子进程来遍历整个内存来进行存储操作,而主进程则仍然可以提供服务,当有写入时由操作系统按照内存页(page)为单位来进行copy-on-write保证父子进程之间不会互相影响。
特点
1.整个redis数据库只包含一个文件,方便容灾恢复,只需将一个文件压缩后转移到其他存储介质
2.性能最大化,避免服务进程IO操作,相对于AOF机制,数据集大,RDB动效率会更高
因为是特定条件下进行一次持久化(每隔一段时间),就可能会导致一旦redis崩溃,再次回复时,可能会导致部分数据丢失。
注:如果设置的备份时间间隔较短,比较耗服务器性能,如果设置的备份时间间隔较长,又可能会导致数据恢复时部分数据丢失。
AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。