zoukankan      html  css  js  c++  java
  • redis持久化的问题

    redis持久化的两种策略


    RDB(redis database):在指定时间将内存中的快照(snapshot)写入到磁盘中进行持久化,恢复的时候直接将其读入到内存中。

    怎么实现的:

    redis单独fork一个线程出来,进行持久化,不会打扰主线程的高速运行,如果进行大规模的数据的恢复,同时对数据的丢失的敏感性不高的话,可以是使用该方法,不过只能恢复最新的备份的数据,会把最新备份之后的数据全部丢失

    fork:复制一个完全一摸一样的线程,什么内存空间啥的都一样的线程,可能拖慢主线程的运行

    dump.rdb:

    什么时候触发保存:

    1、900s内出现1次key的改动

    2、300s内出现10次key的改动

    3、60s内出现10000次key的改动

    什么时候会触发dump

    shatdown redis的时候,默认会去dump当前redis中的keys

    禁用备份

    在conf中写一个

    save ""
    

    如果要即时生效配置

    set key value

    save命令,即时生成dump.rdb

    一些配置

    stop-writes-on-bgsave-error:如果设置为yes,那么如果备份错误的时候,会拒绝写入的,如果设置为no,那么不会拒绝这些东西

    rdbacompression:yes(设置为yes,redis会压缩整个dump文件,会耗cpu的资源)

    rdbcchecknum:验证这个数据的准确性,会耗费cpu的10%的资源

    两种备份方式

    1. save:啥都不管直接备份,系统不能响应set等命令了
    2. bgsave:redis新开一个线程在后台备份,不影响客户端的使用,lastsave获取上次备份时间

    如何恢复:

    将dump.rdb备份到相应的位置,重启redis服务即可

    优势

    1、大规模恢复

    2、对数据的一致性完整性要求不高

    劣势

    1、备份的最后一次到redis down机的中间的数据就没有了,丢失了

    2、fork一个线程进行备份的时候可能会出现性能的下降


     aop:append only file

    是什么:

    redis以日志的方式将所有的写操作记录下来,只需追加文件,不允许改写文件,redis启动之初就会根据这个文件重新构建一遍数据,redis会从头到尾执行一遍整个写操作

    如果aof文件和dump文件共存的时候,首先加载aof文件

    使用redis-check-aop可以fixaof文件的错误

    三种同步策略:

    1、always:每次数据改动都要同步到aof文件中,性能较差,数据完成性比较好

    2、everysecs:每秒同步一次,如果出现问题,可能会丢失1s内的数据

    3、no

    rewrite(重写):aof文件随着文件越来越大,redis会启动文件的压缩,将一些命令合并起来,只保留恢复数据的最小的数据集,可以使用bgrewriteaof命令

    重写机制:记录上一次aof文件的大小,这一次的大小是上次的两倍,同时大于64M

  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/11971860.html
Copyright © 2011-2022 走看看