zoukankan      html  css  js  c++  java
  • Redis持久化-aof

    1.RDB现存问题

      耗时耗性能

        O(n)数据:耗时

        fork():消耗内存,copy-on-write策略

        Disk I/O: I/O性能

      不可控丢失数据

    时间 save
    T1

    执行多个写命令

    T2 满足RDB自动创建的条件
    T3 再次执行多个写命令
    T4 宕机

    T3和T4之间的数据丢失

    2.AOF原理

      Redis将所有写入命令及其参数记录到AOF文件,当服务器宕机过后启用,重新执行AOF文件中的命令

      Redis将写命令记录到AOF的过程

        Redis-server ————Redis命令及参数——————》AOF程序————将命令转换为网络通讯协议的格式追加到AOF缓存——————》AOF缓存—————将命令写入AOF文件的末尾—————》AOF————满足设定的AOF保存条件————》调用fsync或fdatasync函数将文件真正保存到磁盘

    3.文件的写入和保存

      WIRTE:根据条件,将aof_buf中的缓存写入到AOF文件末尾

      SAVE:根据条件,调用fsync或fdatasync函数将AOF文件保存到磁盘中

    4.AOF保存策略

      AOF_FSYNC_NO 跟随系统

        该策略下,Redis被关闭、AOF功能被关闭、系统的写缓存被刷新三种情况执行SAVE

      AOF_FSYNC_EVERYSEC 每一秒保存一次

        该策略下,原则上每隔一秒钟就会执行一次,但实际情况中并非如此

        执行SAVE的四种情况

        子线程正在执行

          这个SAVE执行时间未超过2秒,程序执行WRITE,程序直接返回,不执行WRITE或新的SAVE,发生故障,用户损失小于2秒内的数据

          SAVE执行超过2秒,程序执行WRITE,不执行新SAVE,WRITE必须等待执行旧SAVE执行完才能执行,这里有阻塞,发生故障,会损失超过2秒的数据

          上次成功执行SAVE距现在不超过1秒,程序执行WRITE,但不执行SAVE

          上次成功执行SAVE距离现在超过1秒,程序执行WRITE和SAVE

          

      AOF_FSYNC_ALWAS 每执行一个命令保存一次

       这种策略下,没执行一条命令都有主进程执行WRITE和SAVE操作,SAVE执行期间,主进程会被阻塞,不能处理请求。

    5.三种保存策略的对比

    模式 WITE是否阻塞? SAVE是否阻塞? 停机时丢失的数据
    AOF_FSYNC_NO  操作系统最后一次对AOF文件触发SAVE操作之后的数据
    AOF_FSYNC_EVERYSEC  一般情况下不超过2秒的数据
    AOF_FSYNC_ALWAS  最多只丢失一条命令
  • 相关阅读:
    男子利用POS机帮人非法套现1576万余元被起诉
    套现花样很多 弄不好成了诈骗
    刀尖上的无本生意 信用卡套现投资盛行
    新三板是什么—新三板科普知识讲堂
    Android注入事件的三种方法比较
    当今最流行的Node.js应用开发框架简介
    安卓WindowManager注入事件如何跳出进程间安全限制
    伟大创意检验10要
    初创互联网公司简明创业指南
    根据Unix哲学来编写你的HTML5 Websocket服务器来实现全双工通信
  • 原文地址:https://www.cnblogs.com/xiangdongsheng/p/13550537.html
Copyright © 2011-2022 走看看