目录
Redis 持久化
redis支持2种持久化方式
- RDB
能够在某个时间点对redis进行持久化,文件以序列化的方式存储,大数量时恢复速度奇快。 - AOF
appendOnlyFile通过在文件末尾追加redis每一笔写操作指令来完成持久化,并且redis可以支持对AOF文件的重写(BGREWRITEAOF),从而使得AOF文件不至于太大(简单的说就是对相同的执行指令去重)。
RDB使用方式
一,备份命令save、bgsave。
save:是一种阻塞式备份方式,当该命令执行时redis是不对外提供服务的。
bgsave:当执行该命令时redis是fork了一个子进程,有子进程完成对数据的备份工作,不会阻塞父进程对外提供服务、此同样也是AOF的工作方式。
思考一个问题:为什么是调用系统的fork方法创建子进程。
1,fork 创建子进程速度快。
2,fork创建子进程时对内存的消耗比较少。fork是基于copy-on-wirte(写时复制)机制的即在创建子进程时并不会复制父进程所有的内存空间到子进程(比如现在redis有10个G,子进程不可能直接复制10个G,这样黄花菜都凉了),而是复制了父进程的虚拟地址空间里的映射关系,当某一个进程需要变更某一个值时(如下图的redis子进程),此时才会在内存中新分配一个内存地址,并指向新的映射。
二、配置文件方式
如下图配置了3条save 规则(注意这里的save 对应的是bgsave 命令),如果想关闭RDB方式通过添加 save "" 配置。
RDB缺点:
1,时点性容易导致数据丢失量大。
2,dump.rdb文件不支持拉链,需要人工去维护。