RDB: 在指定时间,将内存数据写入磁盘,替换之前的文件,以二进制的形式存储。
1.RDB实现原理
1.创建一个子进程写入数据,原理利用linux的fork(copy on write - 指针操作)
2. 写入的数据是指定时间的数据
save:阻塞
bgsave:异步的
优缺点:
(1)优点: 恢复速度快
(2)弊端: 永远只有一个dump.rdb文件; 丢失数据相对多一些
AOF: 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。Redis 还可以同时使用 AOF 持久化和 RDB 持久化;如果开启了AOF,就会使用AOF恢复数据
优点:丢失数据少
缺点:
体量大
(1)4.0以前,通过重写->删除抵消名,合并重复命令,最终也是一个存指令文件
(2)4.0以后,通过重写 ->将老的数据RDB到AOF中,将增量以命令的形式记录到AOF中(利用了RDB的快,利用了日志的全量)
AOF写入的三种策略(影响IO)
redis日志写入,需要先在linux的内核的buffer中写入,然后再写入磁盘
(1)always:每次写入都flush到磁盘
(2) 每秒 : 每一秒,从buffer中flush到磁盘
(3)no : 等buffer写满了,才写入磁盘,最多丢失一个buffer的数据