Redis AOF持久化

1. 问题

1) RDB为redis的一个全量的内存快照,但是每次都需要全量,耗时很长,如何实现增量的持久化?

2)类似于Mysql的bin log日志,Row格式存储的是数据,Statement存储的是执行的命令语句,redis有没有?

2.  AOF流程

1) 服务器每次执行完一个写命令,会以协议格式将执行的写命令追加到aof_buf缓冲区的末尾;

2) 根据一定的策略,将缓冲区的数据写入aof文件

AOF流程伪代码: 

def eventLoop():

    while True:

        # 处理文件事件,接收命令请求以及发送命令回复
        # 处理命令请求时可能会有新内容被追加到 aof_buf 缓冲区中
        processFileEvents()

        # 处理时间事件
        processTimeEvents()

        # 考虑是否要将 aof_buf 中的内容写入和保存到 AOF 文件里面
        flushAppendOnlyFile()

flushAppendOnlyFile函数的行为由服务器配置的appendfsync选项的值来决定。

appendfsync有三种值,分别为always(直接同步),everysec(每秒同步一次),no(由操作系统决定).

3. AOF文件格式

举个例子, 如果客户端向服务器发送以下命令:

redis> SET KEY VALUE
OK

那么服务器在执行这个 SET 命令之后, 会将以下协议内容追加到 aof_buf 缓冲区的末尾:

*3\r\n$3\r\nSET\r\n$3\r\nKEY\r\n$5\r\nVALUE\r\n

4. AOF重写

目的: 解决aof文件越来越大的问题

1) AOF重写会重新生成一个aof文件,是经过压缩的aof文件

2) AOF重写是通过读取键值对来实现的,和之前的AOF文件无关

发布了210 篇原创文章 · 获赞 105 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/u010627840/article/details/103803806
今日推荐