Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

补充一个知识

缓存:数据可以丢,保证速度。
数据库:数据是绝对不能丢的,保证速度+持久性,内存中的数据是掉电易失的。

存储层:

  • 快照/副本
  • 日志文件

$$优先级高于管道
Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

fork()

fork是系统调用,copy on write是内核机制。
Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

写时复制
在fork子进程的时候,只拷贝指针,并不发生内存的复制。
只有当其中的某一个进程试图对该区域进行写操作时,内核就会在物理存储器中为子进程开辟一个新的物理页面,将需要写的区域将父进程的内容复制一份给子进程,然后对新的物理页面进行写操作。
这时就是实现了对不同进程的操作而不会产生影响其他的进程,同时也节省了很多的物理存储器。
并且根据经验来看,不可能父子进程将所有数据都改一遍。下图redis也用了这个机制,而且redis的子进程不会去修改数据:

  • 可以用ref记录被引用的数量
    Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

redis 子进程用来RDB持久化落盘,父进程用来提供服务:
Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

RDB:快照,副本

时点性,是每隔一段时间存一下

  • 阻塞,redis不对外提供服务

Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

AOF:追加日志 append only file

redis的写操作记录到文件中,类似于mysql的binlog

  • 非阻塞,redis继续对外提供服务
  • 同时数据能够落地
  • RDB和AOF可以同时开启。如果开启了AOF,重启服务器的时候,只会用AOF恢复。
  • 4.0版本之后,AOF中包含RDB全量,增加记录新的写操作。

RDB的改进
Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用

Redis实战(五):Redis的持久化RDB、fork、copyonwrite、AOF、RDB&AOF混合使用