redis持久化

持久化:可以理解为mit6.824教的主从备份机制,状态转移对应RDB,复制状态机对应AOF,RDB是全部数据的二进制快照文件,AOF是文本追加的日志。RDB拷贝全部数据慢,是分钟级别的恢复机制但恢复更快,AOF通常设置1秒保存一次。官方推荐默认使用RDB但AOF与RDB同时开启仅使用AOF

  • RDB触发:
    1、主动执行save(阻塞)或bgsave(非阻塞)。
    2、达到阙值。
    3、关闭redis。
  • RDB流程:
    1、folk一个子进程。
    2、数据写到临时RDB文件。
    3、新RDB文件替换旧文件
  • RDB持久化时通过写时复制实现可修改。修改时再复制内存,即持久化的是修改前内存。
  • AOF需要修改conf开启,三种模式appendfsync always、appendfsync everysec、appendfsync no。
  • AOF触发:
    1、beforesleep。
    2、周期函数serveCron。
    3、关闭服务器。
    4、关闭AOF。
  • AOF流程:
    1、写入AOF缓存aof_buf。
    2、aof_buf复制到磁盘缓冲区。
    3、调用flush系统调用存盘。
  • AOF重写:
    1、AOF合并新旧指令。
    2、新写入数据写入AOF缓存和AOF重写缓存。
    3、AOF重写缓存追加到新AOF。
    4、新AOF替代旧AOF。
  • AOF重写触发:超过64M且比上次重写数据大一倍。
  • AOF混合持久化:将RDB与AOF缓冲结合为AOF文件,此时AOF不是单纯的文本了(开头有REDIS),而是二进制RDB+指令文本。可降低重写性能损耗。降低AOF存储空间。
    • 合并优化思路:重复指令->通过RDB最终状态推导出最新指令实现合并->直接用RDB又快又少
  • 7.0 MP-AOF:将混合AOF分为BASE AOF文件(RDB快照),和INCR AOF redis追加命令日志文件。由manifest清单管理一组AOF文件,旧AOF被manifest异步删除,优化了新指令要写入两个缓冲和AOF重写缓存还要通过通道加到AOF文件中。
    • MP-AOF优化思路:两个缓冲对应原AOF两个部分,混合AOF两部分拆开后则只需要一个缓存,这个缓存直接写INCR AOF。

你可能感兴趣的:(redis,redis,数据库)