Redis 学习随笔(二)

137 阅读2分钟

一、Redis 持久化

1、RDB 方式

1)RDB 方式是将数据库中的数据以键值对的形式存入 RDB 文件(压缩的二进制文件)。RDB 持久化操作
可以通过手动的方式或者配置进行。
(2)通过 SAVE(阻塞) 命令与 BGSAVE(非阻塞) 命令进行 RDB 持久化操作。
(3)服务器在载入 RDB 文件时,会一直处于阻塞状态,直到载入工作完成。
(4)BGSAVE 过程:主进程 fork 出一个子进程,fork 子进程期间是阻塞的。然后主进程继续负责接收
客户端的请求,子进程根据主进程的内存的副本创建临时快照,当快照文件完成后替换原先的快照文件。
(5)缺点:在执行 BGSAVE 之前,如果服务器宕机,会造成数据丢失。

2、AOF 方式

1)AOF 通过保存数据库的写命令来进行持久化操作。
(2)AOF 持久化过程:在执行 set [key] [value] 命令时,执行完命令后,会将命令内容追加到 aof_buf
缓存区的末尾。然后根据服务器配置的 appendfsync 选项的值来决定是否进行 AOF 文件的同步操作。
(3)AOF 文件的载入:Redis 创建一个不带网络连接的伪客户端,读取 AOF 中的命令进行执行。
(4)AOF 重写:随着时间,AOF 文件的体积会越来越大,所以需要进行 AOF 重写,将多条数据库命令合并
一条数据库命令。在重写期间,主进程会 fork 出一个子进程进行重写的操作,为了解决重写重写过程中主
进程还在接受客户端请求导致数据发生改变,redis 设置了一个 AOF 重写缓冲区,在重写期间,主进程除了
要将修改命令写入 AOF 缓冲区,同时也要写入 AOF 重写缓冲区。子进程完成重写后,会通知主进程,主进程
会将 AOF 重写缓冲区中的内存写入到新的 AOF 文件中,对新的 AOF 文件进行改名,原子性的覆盖旧的 AOF 
文件。
(5)AOF 缺点:载入时速度慢于 RDB 方式。但数据丢失的可能性较小,损失较低。