zoukankan      html  css  js  c++  java
  • redis缓存架构-02-两种持久化机制(RDB和AOF)

    1.两种持久化机制的介绍

      1.1 RDB

        周期性的生成redis内存数据的一份完整的快照

        1)根据配置的检查点,生产rdb快照文件,fork一个子线程,将数据dump到rdb快照文件中,完成rdb文件后,替换之前的旧的快照文件

        2)配置方式,在redis.conf文件中配置save 60 1000(每隔60,如果有超过1000个key发送了变化,就生产一份新的dump.rdb文件)

        3)save可以配置多个,就是多个检查点,只要符合就会进行rdb备份

        4)也可以手动调用save或bgsave命令,同步或异步进行rdb备份

       1.2 AOF(需要在redis.conf文件中开启aof持久化   appendonly yes)

        对每一条写入命令作为日志,以append-only的模式写入到一个日志文件中,redis重启时可以通过回放AOF日志文件重新构建整个数据集。

        1)写日志时,不直接写入到磁盘,而是先写入到os chache中,然后一定时间间隔(每一秒)调用一次操作系统的fsync操作,强制将os chache中的数据,刷入到磁盘文件中。  

          fsync可配置的策略:

            appendfsync always  #每写一条数据,就执行一次fsync,性能非常差

            appendfsync everysec #每秒将os cache中的数据fsync到磁盘,生产环境一般这样配置

            appendfsync no  #仅将数据写入到os cache,redis自己时不时的会调用fsync,不受控制

        2)AOF是存放每条写命令的,所以AOF文件会不断膨胀,当大到一定的时候,就会触发AOF 的rewrite操作

          AOF rewrite操作:基于当前redis内存中的数据,重新构建一个更小的aof文件,然后将旧的aof文件删除

         rewrite可配置的策略:

          auto-aof-rewrite-percentage 100 #当rewrite增长到指定的比例是,进行aof rewrite

          auto-aof-rewrite-min-size 64mb  #aof rewrite时的最小文件大小,只有超过指定的大小才会就行rewrite

        3)如果同时开启了RDB和AOF两种持久化机制,redis在重启时,会从aof文件中恢复数据

    2.两种持久化机制优缺点的比较

      2.1 RDB的有优点

        1)每一个dump.rdb文件代表了某一时刻redis中的全部数据的快照,非常适合做冷备份

        2)直接基于rdb文件重启和恢复redis数据,速度更快(rdb是基于数据文件进行恢复,aof是基于写指令进行回放)

        3)rdb对redis对外提供读写服务影响小,可以让redis保持高性能(rdb每次写都是写入到内存中,一定时间后,fork出一个子进程进行磁盘IO操作;aof需要每次写文件,虽然是先写os cache,但也有一定的开销)

      2.2 RDB的缺点

        1)如果发生故障,数据丢失的可能比较多(每隔一段时间才会进行备份一次)

        2)每次fork子进程进行io操作,如果数据文件特别大,会造成客户端提供的服务暂停数毫秒

      2.3 AOF的优点

        1)如果发生故障,数据丢失的比较少(每秒执行一次fsync,只会丢失一秒的数据)

        2)aof日志文件以append-only模式写入,没有磁盘寻址的开销,写入性高,即使有文件破损,也可以很容易修复(redis-check-aof --fix 要修改的aof文件)

        3)aof通过可读性的方式记录,适合灾难性的误删除的紧急恢复(直接删除aof中的该指令进行重启redis即可)

      2.4 AOF的缺点

        1)相同的数据,aof文件要不rdb文件大

        2)aof开启后,QPS会降低(每秒会进行fsync操作)

        3)数据恢复时,需要基于指令回放操作,恢复速度慢,容易出现bug

    3.两种持久化机制的选择

      同时开启两种持久化机制,用aof保证数据的不丢失,作为数据恢复的第一选择;用rdb进行冷备,在aof文件不可用是,作快速数据恢复。

    4.开启两种持久化机制时的数据恢复

      4.1 如果redis进程挂掉了,重启redis进程即可,基于aof进行恢复

      4.2 如果redis所在的机器挂掉了,重启机器后,尝试重启redis进程,基于aof进行恢复,如果aof文件有破损,使用redis-check-aof fix进行修改

      4.3 如果redis当前最新的aof和rdb文件都丢失或者损坏了 

        1)停止redis,删除appendonly.aof文件和dump.rdb文件

        2)修改redis.conf文件,关闭appendonly no

        3)从云端拷贝dump.rdb文件,重启redis进程

        4)在redis命令行中,热修改配置开启aof,config set appendonly yes

        5)停掉redis进程,修改redis.conf文件,开启aof,appendonly yes

        6)重启redis

  • 相关阅读:
    转自 Because of you 的总结
    转自 Good morning 的几句精辟的话
    (转)一句话小结各种网络流)
    上下界网络流总结
    浮云洲之战
    Poj3680 Intervals
    NOI2008假面舞会
    NOI2010航空管制
    python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)
    python爬虫之反爬虫(随机user-agent,获取代理ip,检测代理ip可用性)
  • 原文地址:https://www.cnblogs.com/lifeone/p/9329453.html
Copyright © 2011-2022 走看看