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

    参考资料:Redis Persistence – Redis

    这里只是总结一些常见的使用方法,需要详细的信息可以到以上地址

    Redis提供持久化方式

    • RDB(Redis DataBase)可以提供某个时间节点的数据集快照
    • AOF(Append Only File)可以提供全部写入命令的合集,服务器在启动时通过命令对数据进行恢复

    持久化过程

    image-20210218161640612

    RDB(Redis DataBase)

    RDB优势

    • RDB是非常紧凑的数据文件,保存了Redis某个时间点的数据集,这种格式非常适合备份。
    • RDB非常适合灾难恢复,可以传输到异地保存。
    • RDB可以保证Redis最大性能,Redis启动一个子进程处理RDB文件,不会在主进程进行频繁IO操作。
    • RDB在恢复大的数据集时比AOF更快。

    RDB劣势

    • 在服务故障时将比AOF丢失更多的数据,如果更改为频繁的备份,则可能会丧失一部分性能。
    • 如果RDB保存点设置较多的情况下会启动更多的子线程处理持久化,处理大数据集时,子线程将消耗更多的CPU资源,若系统CPU吃紧,则会影响Redis服务性能

    RDB配置

    以下用于配置文件redis.conf

    • save <seconds> <changes>:在时间内发生了个数据变更,则保存数据快照。
    • stop-writes-on-bgsave-error:在持久化线程发生错误时是否停止接受客户端写入命令,yes停止接受,no继续写入。
    • rdbcompression:是否对rdb进行压缩,yes启用,no不启用,这将节省一部分CPU资源。
    • rdbchecksum:是否对rdb文件启动CRC64校验,yes启用,添加CRC64校验到文件末尾,文件更不容易损坏,但是会损失一部分的性能,大约10%。no不启用,将节省一部分性能开销。
    • dbfilename:rdb文件名称
    • dir:设置rdb文件存储目录

    RDB快照生成

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

    AOF(Append Only File)

    AOF优势

    • AOF持久化可以通过配置不用的策略,在发生故障时损失更少的数据。
    • AOF文件是一个只进行追加的日志文件,如果在服务断电等情况下发生损坏,也可以通过redis-check-aof工具修复。
    • Redis可以自动重写AOF文件,当AOF文件过大时,Redis会基于当前数据集重写AOF文件,保证最小操作集,以减小文件大小。
    • AOF文件格式更容易理解和解析,可轻松导出AOF文件。

    AOF劣势

    • AOF文件大小通常大于通数据集下RDB文件。
    • AOF持久化可能被RDB慢,取决于fsync策略的设置。
    • AOF出现过一个BUG,再恢复数据时部分命令可能影响得到的数据集与源数据不一致。

    AOF配置

    以下配置适用redis.conf

    • appendonly:配置开启AOF,yes开启,no不开启
    • appendfilename:配置AOF文件名称
    • appendfsync:fsync策略配置
    • no-appendfsync-on-rewrite:配置BGSAVE或BGREWRITEAOF进行时,是否使用主进程写AOF
    • auto-aof-rewrite-percentage:AOF重写比例,设置0禁用重写功能
    • auto-aof-rewrite-min-size:AOF重写文件最小大小
    • aof-load-truncated:设置在redis服务启动时,AOF文件不完整时动作
    • aof-use-rdb-preamble:配置重写AOF时是否使用RDB同步码重写AOF

    AOF fsync配置

    always

    每次命令追加到AOF文件,这将非常慢,但是安全

    everysec

    每一秒追加到AOF文件,已经足够快,如果发生故障,仅损失1秒的数据

    no

    不控制,由操作系统控制,更快,更不安全

    AOF重写

    随着命令的不断写入,AOF文件越来越大,Redis自动触发或者接受到BGREWRITEAOF指令,Redis会启动AOF文件重写,重写的目的是减小AOF文件,在不打断服务客户端的情况下重写。

    • Redis执行fork(),同时拥有父进程和子进程。
    • 子进程开始将新AOF文件的内容写入临时文件中。
    • 对于新的写入命令,父进程一边将它们累积到一个内存缓存中,一边将这些改动追加现有的AOF文件末尾。
    • 当子进程完成重写工作时,它给父进程一个信号,父进程在收到信号之后,将内存缓存区中所有的数据追加到新的AOF文件末尾
    • 最后,Redis原子地用新文件替换旧文件,之后所有的命令直接追加到新的AOF文件末尾

    RDB与AOF

    同时启用

    Redis服务重新启动时,将优先是用AOF文件重建数据集,应为他是最完整的。

    从RDB切换到AOF

    1. 备份.rdb文件

    2. 将此备份转移到安全的地方

    3. 执行以下命令

      redis-cli config set appendonly yes
      #该命令用与开启AOF,
      #Redis会阻塞知道初始AOF文件创建完成,
      #之后Redis继续处理命令,并将命令写入AOF文件末尾
      redis-cli config set save ""
      #该命令用与关闭RDB,不关闭,则保持RDB和AOF同时运行
    4. 检查数据库中key的数量是否相同

    5. 检查AOF文件是否正常生成并追加

    更多redis配置可参考

    和代码生猴子
  • 相关阅读:
    【构建二叉树】01根据前序和中序序列构造二叉树【Construct Binary Tree from Preorder and Inorder Traversal】
    PHP 语言需要避免的 10 大误区
    极客编程必备的五大PHP开发应用
    你听说过PHP 的面向方面编程吗?
    8个开发必备的PHP功能
    写给系统管理员的25个PHP安全实践
    PHP输出缓冲控制- Output Control 函数应用详解
    创建高安全性PHP网站的几个实用要点
    简化PHP开发的10个工具
    PHP文件下载原理
  • 原文地址:https://www.cnblogs.com/dm00/p/14468115.html
Copyright © 2011-2022 走看看