• Redis AOF日志


    1. 如何写日志?

    • 记录增删改命令;
    • 在命令执行之后写日志,避免无效命令的检查开销;

    2. 三种回写策略(保存到磁盘)

    • Always,同步写回:每个写命令执行完,立马同步地将日志写回磁盘;优点是最多只会丢失上一次操作的日志,缺点是每次都需要写到磁盘,这种操作比较慢;
    • Everysec,每秒写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,每隔一秒把缓冲区中的内容写入磁盘;是一种这种的解决方案;
    • No,操作系统控制的写回:每个写命令执行完,只是先把日志写到 AOF 文件的内存缓冲区,由操作系统决定何时将缓冲区内容写回磁盘。优点是避免每次都写磁盘,提高了性能,但是如果down机,丢失的日志也会相比其他俩种更多。

    3. 日志重写

    写日志带来的一些潜在问题:

    • 文件系统本身对文件大小有限制,无法保存过大的文件;
    • 如果文件太大,之后再往里面追加命令记录的话,效率也会变低;
    • 如果发生宕机,AOF 中记录的命令要一个个被重新执行,用于故障恢复,如果日志文件太大,整个恢复过程就会非常缓慢,这就会影响到 Redis 的正常使用。
    • 日志重写就是为了解决上面的问题,将数据库现有的数据重新写入到新的日志文件中,使其保持最新的状态。

    4. 日志重写过程

    • 1. 主线程fork出后台的bgrewriteaof子进程,此过程会从主进程将进程的页表拷贝给子进程;
    • 2. 为bgrewriteaof子进程分配日志缓冲内存区;
    • 3. 主进程处理新的操作时,会继续写正在使用的日志,同时把操作写入到以上缓冲区;
    • 4. 子进行进行日志的重写(其实是读取当前数据库的最新数据写到日志中);
    • 5. 子进程完成日志合并压缩后,向主进程发送一个信号;
    • 6. 主进程将缓冲区的数据写入到心的日志文件,并替换原有旧的日志文件;
  • 相关阅读:
    html5-移动端布局模板
    html5-figure和figcaption元素
    html5-hgroup和address元素
    html5-新元素新布局模板-完善中
    数据库操作符
    数据库操作,复制表
    数据库基本sql语句
    反射+工厂模型+Properties
    java :动态代理
    java 反射
  • 原文地址:https://www.cnblogs.com/flyingaway/p/13807797.html
Copyright © 2020-2023  润新知