实现方式有两种:
RDB(快照/副本)
AOF(日志)
RDB
1.时点性数据
有两种方式,
阻塞(save)
redis对外不提供服务(使用场景,明确知道服务停止使用,关机维护)
非阻塞(bgsave)
redis可以继续对外提供服务,然后将数据落地
如果说8点需要bgsave,保存数据需要半个小时,那么RDB后的数据是保存的8点时内存的数据状态。而不是在保存中间数据发生变化后的,也进行保存。
1.fork出来一个子进程,export的环境变量,子进程可以看到父进程的数据。子进程的修改不会破坏父进程,父进程的修改也不会破坏子进程(子进程只做数据读取保存,不会做数据修改),fork出来的子进程,速度快,空间占用小,比完全拷贝一个出来效率
2.创建子进程并不发生复制,只是指针的变化
3.如果父进程数据发生变化,那么会使用copy on write内核机制,写时复制(根据经验,不可能父子进程把所有数据都改一遍),也是为了占用空间少来考虑
AOF
Append-Only File
如果 appendonly 配置为 no,则不启用 AOF 方式进行备份。如果 appendonly 配置为 yes,则以 AOF 方式备份 Redis 数据,那么此时 Redis 会按照配置,在特定的时候执行追加命令,用以备份数据。