zoukankan      html  css  js  c++  java
  • Redis持久化(persistence)

    Redis 提供了多种不同级别的持久化方式:

    • RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)。
    • AOF append-only file
      持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。 AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。 Redis 还可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。
    • Redis 还可以同时使用 AOF 持久化和 RDB 持久化。 在这种情况下, 当 Redis 重启时, 它会优先使用 AOF 文件来还原数据集, 因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整。
    • 你甚至可以关闭持久化功能,让数据只在服务器运行时存在。

    RDB 和AOF各有优缺点

    rdb恢复可能会丢失几分钟的数据

    快照功能并不是非常耐久(durable): 如果 Redis 因为某些原因而造成故障停机, 那么服务器将丢失最近写入、且仍未保存到快照中的那些数据。

    尽管对于某些程序来说, 数据的耐久性并不是最重要的考虑因素, 但是对于那些追求完全耐久能力(full durability)的程序来说, 快照功能就不太适用了。

    aof文件体积较大,有bug存在,得小心避免

    如果你非常关心你的数据, 但仍然可以承受数分钟以内的数据丢失, 那么你可以只使用 RDB 持久化。

    有很多用户都只使用 AOF 持久化, 但我们并不推荐这种方式: 因为定时生成 RDB 快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比 AOF 恢复的速度要快, 除此之外, 使用 RDB 还可以避免之前提到的 AOF 程序的 bug 。

    RDB 快照

    在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb 的二进制文件中。

    你可以对 Redis 进行设置config, 让它在“ N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。

    你也可以通过调用 SAVE 或者 BGSAVE , 手动让 Redis 进行数据集保存操作。

    比如说, 以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:

    save 60 1000
    

    这种持久化方式被称为快照(snapshot)。

    当 Redis 需要保存 dump.rdb 文件时, 服务器执行以下操作:

    1. Redis 调用 fork() ,同时拥有父进程和子进程。
    2. 子进程将数据集写入到一个临时 RDB 文件中。
    3. 当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件。

    这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益。

    append-only file  AOF

    你可以通过修改配置文件来打开 AOF 功能:

    appendonly yes
    

    从现在开始, 每当 Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。

    这样的话, 当 Redis 重新启时, 程序就可以通过重新执行 AOF 文件中的命令来达到重建数据集的目的。

     

  • 相关阅读:
    散列函数之单散列算法
    NET 使用 RabbitMQ
    leetCode
    Swift 1
    C#并发集合
    多进程与多线程1
    开发编译器
    APUE1
    微服务架构
    ExceptionHandlerMiddleware中间件如何呈现“定制化错误页面”
  • 原文地址:https://www.cnblogs.com/xiangqianzou/p/6999852.html
Copyright © 2011-2022 走看看