zoukankan      html  css  js  c++  java
  • Redis快照Snapshoot

    为什么有了AOF日志还需要快照?

      AOF日志和快照都是为了在服务器down机后能恢复数据,但是AOF有一个问题,在恢复数据时,需要一条条执行AOF命令来恢复,这个过程会比较耗时。而快照是将内存中现有的数据进行序列化,在恢复时直接反序列化恢复到内存中即可,这种方式比AOF的恢复方式更加快。

    快照的过程是怎样的?

    1. 从主进程fork出子进程bgsave,此时同样是会将主进程当前的内存页表(即指针)拷贝一份给bgsave子进程;
    2.  同时分配一个缓存区,记录子进程处理过程中主进程的操作,这样就不需要阻塞主进程;
    3.  如果主进程有修改数据的修改操作,则会在缓存区分配一个新的存储保存该数据(主进程所持有的数据仍然正常修改)Copy-On-Write
    4. 子进程根据页表的引用进行数据的保存;

    快照带来的问题

    1. 快照频率高,会导致上一个磁盘写入还未完成,就开始下一个快照操作,磁盘带宽导致效率低,同时如果修改操作较多,仍会消耗内存及CPU资源等;
    2. bgsave虽然是子进程,不阻塞主进程,但是fork操作仍是阻塞的,如果数据量过大,频率太高会降低主线程的响应速度;

    针对以上问题,Redis 4.0引入了快照和AOF日志混合使用的方法,在俩个快照之间,使用AOF日志记录过程中的操作,这样的话,即可以在down机后快速恢复服务,又不需要高频率进行快照操作。

  • 相关阅读:
    OO第三次阶段性总结
    OO第二次阶段性总结
    OO第一次阶段性总结
    【软工】提问回顾与个人总结
    【软工】结对编程作业
    【软工】第一次阅读作业
    【软工】第0次个人作业
    oo作业总结(四)
    OO作业总结(三)
    oo作业总结(二)
  • 原文地址:https://www.cnblogs.com/flyingaway/p/14067176.html
Copyright © 2011-2022 走看看