Redis7持久化机制 - 6 & 7 | 青训营笔记

153 阅读2分钟

Redis7早就出现了,现在去Redis官网看到的最新的stable版本都成Redis7了

新特性比如 新持久化机制,ListPack,命令增强等

可以ListPack在数据结构中的改进,这里是讲Redis7新的持久化机制

Redis持久化

定义:

因为Redis是内存数据库,当主机宕机后数据会消失。为了保证数据的完整性,在系统启动时,读取持久化文件保证Redis的持久化机制

RDB ( Redis DataBase )

把某一刻的数据和状态以文件的形式写到磁盘上,就是定时记录一个快照,这个快照会写到文件里面

(在哪里启动redis,就会写到当前的目录)

他是全量快照,所有的数据都会写进去

6.0 vs 7.0

RDB在6.0 设置的是

  • save

    • 15min 1 这里 7.0 改成了 1h 1
    • 5min 10
    • 60s 10000

启动时点:

  • 配置文件
  • save / bgsave
  • flushall / flushdb : 产生rdb,但是是空的
  • shutdown 且没有AOF
  • 主从复制自动触发

缺点:

  • 因为是定时记录,所以可能都是最近一次快照到当前的数据
  • 内存的增量同步,而且还有fork,需要考虑两倍膨胀

AOF(Append Only File)

定义:

以日志的形式记录每个写操作,读操作不记录,redis启动之初就会读取它重新构建数据完成数据恢复

默认不打开

流程:

  • 客户端发送请求命令
  • Redis Server不是直接写入AOF文件,而是写入AOF缓存区,然后根据不同的写回策略写入AOF文件
  • 在AOF过大的时候,又会进行AOF重写,保证AOF的压缩

写回策略

  • 默认: everysec
  • Always: 究极同步,执行一个写一个
  • no: 只写到内存缓冲区,由操作系统

6.0 vs 7.0

  • 存储位置: 在6.0 ,AOF和RDB是在一个目录,而7.0会在RDB的文件位置,在新开一个指定名称的"appenddirname",然后放在那个路径里,保证rdb和aof的区分

  • 多文件存储:

    • redis6中,aof文件只有一个

    • redis7: 采用Multi Part设计

      • base基本文件xxx.aof
      • incr增量文件xxx.aof
      • manifest清单文件

缺点

  • 等效aof比rdb大,恢复速度更慢
  • aof运行效率慢于rdb

AOF重写机制

用一个指令代替之前的指令,默认配置是 AOF文件时上次rewrite的两倍并且文件大于64M

  • 在7.0中

    • 重写是: 先把incr增量文件清空,然后再将base文件基于现有数据进行压缩

AOF+RDB混合

双开时

默认读取AOF不读取RDB

格式

开启混合模式后,aof文件会包括rdb格式和aof格式

在redis7中体现为:

在三个Multi Part中

base是rdb文件而非aof文件