一、RDB(Redis DataBase)
- 是什么:
RDB是在指定的时间间隔内将内存中的数据集快照写入磁盘,恢复的时候将文件快照直接读取到内存中。
Redis会在启动目录下生成一个dump.rdb文件。redis.conf配置如下:
也可以指定输出目录:
默认RDB持久化的三种策略:
在配置好配置文件以后,重启Redis,进行测试,配置在30s内改变10个key就进行持久化操作
在存入12个键值对以后,dump.rdb的文件大小发生了改变,说明持久化成功,需要注意的是,redis只会按照规则持久化30s内的10个key,超过第十个的重新计算时间。也就是说这12个key只持久化了10个。
持久化操作中的一个配置:在磁盘满了的时候,关闭写操作
- 怎么进行的持久化
Redis会单独创建一个子进程(fork进程)来进行持久化,先把数据写入到一个临时文件中,等到持久化过程都结束以后,再用这个临时文件替换上次持久化好的dump文件。在整个持久化的过程中,主进程不进行任何IO操作,保证了性能。
RDB的缺点是最后一次持久化后的数据可能丢失,因此要恢复大量的数据,而且对数据的完整性不是很敏感的话,RDB是要比AOF高效的。 - RDB恢复
刚刚存入了12个数据,在关闭Redis重启后,会自动读取dump中的文件,结果只有10个,因为设置的是30s内有10个key改变就持久化。
二、AOF(Append Only File)
-
是什么
以日志的形式来记录每个写操作(增量保存),记录Redis中的写指令,读取操作不做记录,只允许追加文件但是不可以修改文件,redis在启动的时候读取该文件来构建数据,换言之,就是Redis在重启的时候执行了一次日志文件中的内容来恢复数据。 -
修改配置启动AOF
AOF文件的默认位置和dump文件在同一个地方
注意:AOF和RDB同时开启,Redis默认使用AOF的持久化方式,因为没有数据的丢失。 -
测试
在执行了写操作后,可以发现AOF文件的大小发生了改变,说明持久化成功。
关闭再启动redis,发现数据还在
-
.aof文件修复
在aof文件损坏后,redis无法连接,需要修复.aof文件,可以利用自带的命令redis-check-aof --fix 文件名.aof
进行修复文件。如图,在aof文件中追加Hello
连接redis:出错
修复aof文件:
再次重启连接redis并查看数据:
-
AOF同步频率设置
- always 始终同步,redis每次写入的指令都会立刻记录到日志,性能较差但是数据完整性好
- everysec 每秒同步,每秒记录日志一次,如果宕机,本秒的日志信息可能丢失。
- no redis从不主动进行同步,把同步时机交给操作系统
- 流程总结
- 客户端的请求写命令会被append追加到AOF缓冲区
- AOF缓冲区根据AOF策略将操作同步到磁盘的AOF文件中
- AOF文件大小超过重写策略或者手动重写的时候,会对AOF进行rewrite重写,压缩AOF文件大小。
- Redis重启服务的时候,会重新load加载AOF文件中的写操作达到恢复数据的目的。