Redis 持久化有几种方式?

持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。Redis 提供了两种持久化方式:RDB(默认) 和 AOF。

RDB

RDB 是 Redis DataBase 的缩写。按照一定的时间周期策略把内存的数据以快照的形式保存到硬盘的二进制文件。即 Snapshot 快照存储,对应产生的数据文件为 dump.rdb,通过配置文件中的 save 参数来定义快照的周期。核心函数:rdbSave(生成 RDB 文件)和 rdbLoad(从文件加载内存)两个函数。

image-20210608012429690

AOF

AOF 是 Append-only file 的缩写。Redis会将每一个收到的写命令都通过 Write 函数追加到文件最后,类似于 MySQL 的 binlog。当 Redis 重启是会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。每当执行服务器(定时)任务或者函数时,flushAppendOnlyFile 函数都会被调用, 这个函数执行以下两个工作:

  • WRITE:根据条件,将 aof_buf 中的缓存写入到 AOF 文件;
  • SAVE:根据条件,调用 fsync 或 fdatasync 函数,将 AOF 文件保存到磁盘中。

image-20210608012457207

RDB 和 AOF 的区别:

  1. AOF 文件比 RDB 更新频率高,优先使用 AOF 还原数据;

  2. AOF比 RDB 更安全也更大;

  3. RDB 性能比 AOF 好;

  4. 如果两个都配了优先加载 AOF。

发表评论

后才能评论

评论(2)

  • 请叫我张大彪 普通 2022-01-06 7:47 下午

    rdb保存的是二进制文件 优先使用rdb还原 数据

  • 誓依然 普通 2021-11-02 6:36 下午

    持久化:
    (1)客户端向服务端发送写操作(数据在客户端的内存中)。
    (2)数据库服务端接收到写请求的数据(数据在服务端的内存中)。
    (3)服务端调用write这个系统调用,将数据往磁盘上写(数据在系统内存的缓冲区中)。
    (4)操作系统将缓冲区中的数据转移到磁盘控制器上(数据在磁盘缓存中)。
    (5)磁盘控制器将数据写到磁盘的物理介质中(数据真正落到磁盘上)。