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文件