自学内容网 自学内容网

Redis 持久化数据

1.基本概念:

        Redis 支持两种主要的持久化方式:RDB (Redis DataBase)和AOF (Append Only File),用于将内存中的数据持久化到磁盘上,以避免数据在服务器重启或意外故障时丢失。

2.RDB(Redis DataBase):

        将某一个时刻的内存数据,以二进制的方式写入磁盘。

  • 原理:Redis 会在特定的时间间隔或达到特定条件时生成一个数据快照,将所有的数据写入到一个 RDB 文件中。
  • 优点
    • RDB 文件紧凑、体积小,便于备份。
    • 加载 RDB 文件比 AOF 更快,因此适合大数据量的恢复。
    • 适用于周期性的备份,比如每天或每小时一次的备份。
  • 缺点
    • 由于是间隔性的快照,如果 Redis 崩溃,最近一次快照后的数据可能会丢失。
    • 大量数据时,生成快照的过程会消耗 CPU 和内存,影响性能。

3.AOF(Append Only File):

               每一次写操作都记录到日志文件中的方式。

  • 原理:Redis 将每一条写入命令追加写入到 AOF 文件中,Redis 重启时通过重放 AOF 文件中的命令来恢复数据。
  • 优点
    • 数据安全性更高,可以设置同步策略保证几乎不丢失数据(比如每秒同步一次)。
    • AOF 文件是命令日志,易于理解和修改。
  • 缺点
    • AOF 文件比 RDB 文件大,恢复速度较慢。
    • 需要定期对 AOF 文件进行重写以减小文件大小。

3. 混合持久化

        Redis 4.0 及之后版本引入了混合持久化模式,将 RDB 和 AOF 的优势结合。即在重写 AOF 文件时,Redis 将同时生成一个 RDB 快照,并将最近的操作记录追加到 AOF 中。这样既能享受 RDB 的快速恢复,又能保证 AOF 的高安全性。

  • 原理:当 Redis 需要将数据持久化到磁盘时,会保存一个 RDB 快照,并在快照的基础上追加 AOF 文件中的命令。这样可以减少 AOF 文件的大小,同时提高数据恢复的效率。
  • 过程
    • Redis 启动时,首先通过 RDB 快照恢复数据,然后通过 AOF 文件补充快照后发生的变更。
    • 因为 AOF 只需要记录 RDB 之后的变更,所以文件大小减少,加载速度更快。

4.RDB和AOF的区别:

(1).存储方式:

        RDB :通过快照(snapshot)机制,将 Redis 中的数据集以二进制文件的方式写入硬盘;

        AOF :通过将 Redis 服务器执行的所有写命令(例如 set、del、incrby 等)记录在 AOF 文件中,写入方式是追加写入

(2).数据恢复

        RDB:恢复时加载最近一次生成的快照。这意味着数据可能会丢失最近的一些操作

        AOF:记录每次写操作,恢复时按顺序重放这些操作。因此,它能恢复最近的所有操作,数据丢失的风险更小

(3).性能

        RDB:由于 RDB 是定时执行快照,所以它对性能影响较小,适合对性能要求高、数据恢复精度要求不高的场景。

        AOF:AOF 每次写入操作都会记录,尤其在同步频率较高时(appendfsync 设为 always),对性能影响较大。不过在日志文件重写时,Redis 会压缩 AOF 文件,减少开销。

(4).数据一致性

        RDB:RDB 只能在设定的快照时间点恢复数据,因此可能会丢失快照之后的一些数据。

        AOF:AOF 提供更高的数据一致性,因为它记录了每一次操作,几乎不会丢失数据。

(5).文件体积

        RDB:由于 RDB 以二进制快照的形式存储,文件体积通常较小。

        AOF:AOF 文件随着时间推移可能会变得很大,因为它记录了所有写操作。不过,Redis 提供了日志重写机制,可以通过重写来压缩文件。

(6).使用场景

        RDB 适用于:

  • 数据一致性要求不高的场景(如缓存场景)。
  • 系统负载较重时,减少持久化对性能的影响。
  • 需要快速加载大数据集的场景。

        AOF适用于:

  • 数据一致性要求较高的场景。
  • 希望最小化数据丢失的情况。


原文地址:https://blog.csdn.net/m0_74064008/article/details/142435819

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!