美文网首页
Redis-持久化

Redis-持久化

作者: GGBond_8488 | 来源:发表于2020-02-26 21:40 被阅读0次

    持久化机制

    RDB(默认开启的)

    RDB:Redis(单进程:不能同时处理命令和处理持久化)会单独创建fork一个与当前进程一样的子进程来进行持久化,这个子进程的所有数据(变量,环境变量,程序设计计数器等)都和原进程一模一样,会先将数据写入到一个(启动目录下)临时文件中,待持久化结束了在用这个临时文件(temp-xxxx.rdb)替换上次的持久化好的文件(dump.rdb),整个过程中,主进程不进行任何的I/O操作,确保了极高的性能。

    持久化什么时候触发的

    shutdown时若未配置AOF,会自动触发
    配置文件中的默认快照配置

    # Save the DB on disk:
    #
    #   save <seconds> <changes>
    #
    #   Will save the DB if both the given number of seconds and the given
    #   number of write operations against the DB occurred.
    #
    #   In the example below the behaviour will be to save:
    #   after 900 sec (15 min) if at least 1 key changed
    #   after 300 sec (5 min) if at least 10 keys changed
    #   after 60 sec if at least 10000 keys changed
    #
    #   Note: you can disable saving completely by commenting out all "save" lines.
    #
    #   It is also possible to remove all the previously configured save
    #   points by adding a save directive with a single empty string argument
    #   like in the following example:
    #
    #   save ""
    
    # 这里指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
    # 这里表示900s内有1个更改,300s内有10个更改 以及60s内有10000个更改
    # 禁用rdb持久化策略,不设置save指令或者直接给save传入一个空字符串就行
    save 900 1
    save 300 10
    save 60 10000
    

    主从复制模式下RDB模式是无法关闭的
    执行命令save或者bgsave
    1.save时只管保存,其他不管,全部阻塞(使用主进程)
    2.bgsave:redis会在后台异步进行保存,同时可以响应客户端的请求(fork一个子进程)
    3.执行flushall命令 清空所有数据库也会生成一个没有数据的dump.rdb文件

    AOF

    丢失数据比RDB要少很多(AOF丢失数据间隔不会超过2s)
    1.原理:将Redis的操作日志以追加(append)的方式写入文件中,读操作不记录。
    2.触发机制:(根据配置文件配置项)

    no:表示等操作系统进行数据缓存同步到磁盘(快,持久化没保证)(在缓存中可能丢失数据)
    always:同步持久化,每次发生数据变更 时,立即记录到磁盘(慢,安全)I/O次数太多,消耗系统资源
    everysec:表示每秒同步一次(默认值,很快,但可能会丢失一秒以内的数据)(二者中和)

    AOF文件(保存的字符串是协议)

    (Redis框架给服务其发送的就是这样的字符串)
    *2(*表示下面有两组命令)
    $6($表示接下里一个命令的长度为6)
    SELECT
    $1
    0
    *3
    $3
    set
    $5
    aofff
    $4
    test
    

    3.AOF重写触发机制(给appendonly.aof文件瘦身)
    当AOF文件增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。
    auto-aof-rewirte-min-size 64mb
    当AOF文件大小增长率大于该配置的项时自动开启重写
    auto-aof-rewirte-percentage 100 -指超过原大小的100%

    4.如何重写
    多条写入命令可以合并成一条。比如上面的lpush命令了3次,最后合并成1条
    重写后AOF文件只保留最终数据的写入命令

    总结:有rdb还选择aof的:aof丢失数据少
    aof与rdb同时存在,优先aof
    RDB(消耗低丢失多)
    AOF(消耗高丢失少)

    RDB持久化方式的优点:

    • 非常适合全量备份
    • 恢复速度比AOF快

    RDB持久化方式的缺点:

    • RDB方式没有办法做到实时持久化
    • 版本兼容RDB格式问题

    AOF持久化方式的优点:

    • 做到最多丢失1-2s内的数据(最多丢失2s数据,因为AOF追加阻塞)

    AOF持久化方式的缺点:

    • AOF文件比RDB文件大
    • 可能导致追加阻塞

    RDB:适合大规模的数据恢复,对数据完整性和一致性不高,在一定时间间隔做一次备份,如果aof的话,就会丢失最后一次快照后的所有操作。
    AOF:根据配置项而定
    官方建议两个同时开启,优先使用aof机制

    相关文章

      网友评论

          本文标题:Redis-持久化

          本文链接:https://www.haomeiwen.com/subject/kpctchtx.html