Redis有什么耐久化战略?

了解过 Redis 的耐久化战略吗?介绍一下?

好的,面试官
Redis 的耐久化战略分为三种,分别是 AOF 耐久化、RDB快照耐久化、以及这两种的一个混合方式。
下面我详细介绍一下这三种战略的异同吧。
首先是 AOF 耐久化
这个耐久化方法在 Redis 中是默认不敞开的,所以需求运用的时候要在装备文件中装备一下
AOF 耐久化其实就是 Redis 主进程依据写操作生成日志并写到 aof 文件的进程。
这儿的 aof 文件能够理解为 Redis 的一个日志文件,只要是写操作都会生成对应的日志并需求写入 aof 文件中;
在 Redis 中是先履行操作(写操作),后生成日志的;
在日志真正写进 aof 文件之前,会通过 aof 缓冲区,是用来提高写入功能的;
aof 缓冲区的落盘战略有三种 AlwaysEverysecNo,
这三种战略的数据安全性和功能都有所不同,我们能够依据实际的事务需求来选择;
aof 是追加写的,为了防止 aof 文件过于巨大,Redis 中供给了 aof 重写机制,
为了防止堵塞主进程处理客户请求,所以 aof 的重写是交由 fork 出来的子进程处理的。
接着介绍一下 RDB 快照耐久化 
这种方法是 Redis 中默认运用,在功能上会比 AOF 要好一些,
由于 AOF 在恢复数据的时候是需求从头履行指令的,而 RDB 只需求将快照数据从头加载进内存即可。
RDB 快照能够由主进程或者子进程生成,
取决于履行什么样的指令(save 是主进程,bgsave 是 fork 出来的子进程履行)
最终讲讲混合耐久化
混合耐久化是作业在 AOF 重写的进程中的
先是将 RDB 快照数据写进新的 aof 文件,接着将这进程中新增的日志以 aof 的方式追加在新的 aof 文件后面,
最终将新的 aof 文件取代旧的
混合耐久化就充分利用了 RDB 的快速和 AOF 的安全性,前面的 RDB 数据只需求加载进内存即可,而增量的 aof 日志是很少量的。
其实 Redis 的这整个规划看起来能够说是一个规范的仿制状态机的应用,日志 + 快照,我们能够看到 MySQL 也有类似的规划,redo log 是它的日志,而 bing log 是它的快照。