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

    前情概要:

      和一个同事排查一个Redis的问题的时候,同事突然来了句“你知道Redis的几种持久化方式么?”,很自然的就答道“rdb和aof嘛“,同事则说其实有第三种方式“rdb和aof的混合版”,震惊!!!

    Redis需要持久化的原因:

    Redis数据都在内存中,当出现服务挂掉等场景时需要重新启动服务,若未进行持久化则直接数据丢失(其实就和最开始没用文件或者数据库学编程一样吧,重启下代码啥都得从头再来)

    Redis持久化方式:RDB(快照)、AOF(追加)、混合(持久化操作数据rdb、之后操作aof)

    RDB(快照)

      原理:将当前内存中的redis库中的数据写入磁盘(主进程会fork一个子进程执行BGSAVE命令来将内存中redis的数据写入临时持久化文件,同时主进程继续接收请求提供服务,待快照生成后使用临时文件替换原持久化文件)

      参数设置:配置文件中或者命令行修改参数,save seconds  updateCount(即在指定时间内执行了指定条修改操作将执行一次持久化),可设置多条

      优点:1、文件紧凑、小   2、性能较优    3、大数据集恢复比aof快  4、适用容灾(文件小传输快、恢复快)

      缺点:1、故障时会丢失最后一次持久化后的数据   2、大数据集时fork子进程较耗时  3、可读性差

      持久化命令:bgsave(fork子进程进行持久化)   save(直接阻塞进行持久化)

    AOF(追加)

      原理:将所有修改指令追加到文件末尾(恢复时从头一条条执行命令即可)

      参数设置:appendonly设置为yes,appendfsync设置为everysec(每秒执行一次,默认)、always(每条修改命令都执行)、no(不主动执行,由操作系统决定)

      优点:1、故障时丢失数据少(取决于参数配置) 2、持久化文件兼容性(不受版本制约)、可读性强(协议较简单,了解规则可直接读懂,在未重写前可恢复至指定位置)

      缺点:1、持久化文件较大 2、性能可能没rdb快 3、可能重新载入时数据不一致

      持久化命令:bgrewriteaof

    混合(RDB+AOF)

      原理:先将内存数据rdb快照存到aof文件前面,然后再将缓冲区数据通过aof格式存到aof文件末尾,然后替换旧文件

      参数设置:aof-use-rdb-preamble设置为yes

      优点:结合rdb和aof的优点,持久化文件小,加载快

      缺点:持久化文件可读性差、兼容性差(4.0前版本不识别)

      持久化命令:bgrewriteaof

      恢复:同aof,恢复aof文件,只是aof文件中可能前一部分为rdb格式

    后话:各个方案都有自己的优劣,没有那种方案是万能最优解,我们需要根据实际的场景来选择持久化的方式,是啊,除了Redis的持久化我们的生活也如此,不是么?

  • 相关阅读:
    WINDOWS操作系统各种版本(转)
    等待的日子
    多媒体大赛决赛纪事
    如何使用nero刻录数据光盘(转)
    无法显示隐藏文件的方法
    2007年教育技术学专业硕士点招生简章
    教育学专业基础综合推荐教材
    .NET 的发展与变迁
    Windows XP SP3与Vista SP1,谁更强?
    2007年教育学专业基础综合考试大纲
  • 原文地址:https://www.cnblogs.com/huangxinyuan650/p/14165859.html
Copyright © 2011-2022 走看看