大数据中Redis的持久化机制简单讲解

363 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第30天,点击查看活动详情

Redis的持久化机制

我们知道Redis是保存到内存中的,那么这就引出了一个问题,如果我的服务器突然断电,那么所有的数据都会丢失吗?
答案:不会的。针对这种情况,Redis采用持久化机制来增强数据的安全性。

Redis的持久化机制有两种,一种是RDB机制,另一种是AOF机制。

RDB机制(Redis默认机制)

1. 机制描述

每隔一定的时间RDB机制将内存中的数据作为一个快照保存到硬盘上的文件中。

2. 机制触发时机

1)服务器关机
如果执行 SHUTDOWN命令让Redis正常退出,那么此前Redis就会执行一次持久化保存。

2)使用保存命令
命令行输入 savebgsave ,Redis就会将当前内存中的文件自动保存为磁盘文件。其中, save 命令是前台保存,在内存文件未全部保存完之前,客户端无法再进行操作;bgsave是后台保存,并不会阻塞客户端。

3)自动触发保存
除了以上两种手动触发条件外,在RDB机制中还有一种自动触发落盘内存文件。在redis.conf命令文件中,有这样的默认配置会自动触发保存。

save 900 1   # 900秒内至少有1次数据修改,则触发内存文件保存操作
save 300 10  # 300秒内至少有10次数据修改,则触发内存文件保存操作
save 60 10000   # 60秒内至少有1万次数据修改,则触发内存文件保存操作

3. 思考:RDB机制能够保证数据的绝对安全吗?

答案是不可以。因为在RDB机制的自动机制触发条件中,在15分钟内我只修改了一次数据,此时服务器突然断电,那么此时刚才做的数据修改不会保存在磁盘中,因为未超过15分钟,不会触发RDB机制的自动保存。

AOF机制 (AppendOnlyFile)

1. 机制描述

根据配置文件中指定的策略,AOF机制会把生成数据或修改数据的命令保存到硬盘上的文件中。

2. AOF基本配置

配置项取值作用
appendonlyyes启用AOF持久化机制
no禁用AOF持久化机制 [ 默认值 ]
appendfilename"文件名"AOF机制的持久化文件名
dirRedis工作目录路径指定存放持久化文件的目录的路径。 注意:这里指定的必须是目录,不能是文件名
appendfsyncalways每一次数据修改后都将执行写入操作(落盘),缓慢但是最安全
everysec每秒执行一次写入操作。运行速度较快
no由操作系统在适当的时候执行写入操作,运行速度最快

3. 思考:AOF机制一定能够保证Redis安全吗?

答案是可以的。开启AOF机制中的同步机制 appendfsync,选择always,那么每一次的操作命令都会被记录下来,保存在硬盘中,即写一次落盘一次。但是相应的耗费资源、性能过多,所以一般不采用。

4. 选择次序

Redis默认启用的是RDB机制,但如果RDB机制和AOF机制都打开,那么Redis会优先选择AOF机制,因为AOF机制可以保证数据安全。

Redis重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。

那就有一个问题了,既然RDB的数据不实时,而且同时使用两者时服务器重启也只会找AOF文件,那么可以只使用AOF吗?
对于此呢,最好不要,因为RDB更适合用于备份数据库(AOF在不断的变化不好备份)、快速重启,而且不会有AOF可能潜在的bug。