zoukankan      html  css  js  c++  java
  • Redis:持久化(RDB,AOF)

    RDB和AOF是redis持久化的基本!

    一,RDB(Redis DataBase)

    在指定的时间间隔内将内存中的数据集快照写入磁盘,实现持久化,也就是Snapshot快照,它恢复时是将快照文件直接读到内存里

    RDB工作过程:

      Redis会单独创建一个(fork)子进程来进行持久化,他的数据来源于(OS写的复制机制)父进程与它的共享内存中,fork会将数据写入到一个临时文件中,等到持久化都结束了,再用这个临时文件替换上次持久化好的文件,整个过程中,主进程时不进行任何IO操作的,因此确保了主进程极高的性能;

    使用场景:

      如果需要进行大规模数据的恢复,且对于数据的完整性要求不是那么高的话,RDB一定会比AOF要更加高效

    RDB缺点:

      1.由于RDB的工作特点,在上一次持久化数据没结束,但父进程却意外关闭,就会最后一次快照没有持久化到正式EDB文件中,导致数据不完整

      2.fork子进程需要一定的内存空间

    RDB文件保存的位置: dump.rdb

    save触发机制:

    1,save的规则满足的情况下,会自动触发rdb规则

    2,执行flushall命令,也会触发rdb规则

    3,推出redis,也会产生reb文件

    备份就自动生成了dump.rdb

     恢复rdb文件

    1.将rdb文件放到redis的启动目录下就可以了,redis启动会自动检查dump.rdb回复其中数据

    2.查看rdb应该存放的位置

    二,AOF(Append Only File)

    将所有的命令都记录下来,恢复时就把这个文件全部执行一遍

     

    说明:

    以日志的形式记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只需追加文件但不可以改写文件,redis启动时会读取该文件重新构建数据,

    通俗的说,重启Redis时会根据aof文件里的写指令,从头到尾重新构建一遍

    Aof保存的是appendonly.aof文件

    AOf在Redis配置文件中的位置(appendonly)

     默认不开启的,需要手动进行! 仅需将appendonly改为yes就开启了aof

    重启redis就可以生效

    如果aof文件有错,redis是启动不起来的,因此需要修复这个aof文件

    解决方法:redis提供了一个工具,在redis启动目录下运行redis-check-aof  --fix

    优点和缺点

    优点:

    1,每一次修改都同步,文件的完整会更加好

    2,每秒同步一次,可能会丢失一秒的数据

    3,从不同步,效率最高

    缺点:

    1,相对于数据文件来说,aof远远大于rdb,修复速度也比rdb慢

    2, Aof运行效率要比rdb慢,所以我们redis默认的配置就是rdb持久化

  • 相关阅读:
    自定义UINavigationBar
    UIImage 拉伸图片 resizableImageWithCapInsets
    自定义UINavigationBar上面的按钮
    tableView中deselectRowAtIndexPath的作用
    [LeetCode] Search a 2D Matrix, Solution
    [LeetCode] Longest Valid Parentheses, Solution
    我也写了一个牛顿迭代法,貌似不需要特殊处理溢出的情况 class Solution { public...
    [LeetCode] Remove Duplicates from Sorted List II, Solution
    [LeetCode] Palindrome Partitioning, Solution
    [LeetCode] Two Sum, Solution
  • 原文地址:https://www.cnblogs.com/CL-King/p/14598739.html
Copyright © 2011-2022 走看看