我们都知道电脑中的内存一般指的是 DRAM,属于易失性存储器,里面的电容是会漏电的,需要通电来定期刷新,当断电以后内存中的数据会慢慢消失。
以速度著称的 redis 就是工作在内存中的,它的数据都保存在内存当中,一旦断电或者宕机,所有的数据都会丢失,因此将内存中的数据写入硬盘中进行备份是十分必要的,我们将备份数据到硬盘中的操作叫做数据的持久化。
redis 为我们提供了两种数据的持久化方式:RDB(Redis DataBase)和 AOF(Append Only File)。
按照官方的解释,RDB 策略指的是 redis 在指定的时间间隔内将内存中的数据集快照 (数据备份)写入磁盘, 恢复时是将快照文件直接读到内存里。
在 RDB 持久化方式下,数据的备份并不会影响 redis 的 I/O 操作,redis 会单独创建一个子进程专门进行数据的备份操作,它会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。这样做的好处是保证了极高的性能,但是会存在备份数据不完整的问题,比如最后一次持久化进行的时候突然宕机了,那么会丢失一部分数据。
♂️如何开启 RDB 呢?
RDB 是 redis 默认的持久化方式,在配置文件 redis.conf
中可以对其进行设置。
dump.rdb
:save 30 10
表示在 30 秒内如果有 10 次改动就备份:除了配置触发策略让 redis 自动生成 RDB 文件,我们也可以使用命令手动备份:
save
:进行备份,只管保存,会阻塞 redis 的其他操作,一般不建议使用。bgsave
:让 redis 在后台异步进行快照操作,快照同时还可以响应客户端请求。lastsave
:获取最后一次成功执行快照的时间。♂️触发 RDB 机制的三种情况:
.rdb
文件。flushall
命令,会自动生成 .rdb
文件,但里面是空的,没有意义。.rdb
文件。♂️如何从备份文件中恢复?
只需要将 .rdb
文件放在 redis 的启动目录,redis 启动的时候会自动检查 dump.rdb
来恢复其中的数据。
♂️优点 & 缺点:
AOF 全称 Append Only File,以日志的形式记录 redis 中的每个写操作,将 redis 所有执行过的写命令记录在备份文件中,redis 启动之初会读取该文件来重新构建数据,其实就是把之前执行过的所有命令再执行一遍来完成数据的恢复工作。
之所以叫 Append Only File,是因为日志文件只许追加备份的指令,而不能改写该文件。
♀️AOF 持久化流程:
[always, everysec, no]
将操作同步到磁盘的AOF文件中;♀️有关 AOF 的配置:
在 redis.conf
文件中可以修改有关 AOF 的配置:
appendonly no
中的 no 改为 yes 即为开启 AOF 持久化策略。appendfilename "appendonly.aof"
可以配置备份文件的名称。appendfsync always
,始终同步,每次 redis 的写入都会立刻记入日志,性能较差但数据完整性比较好。appendfsync everysec
,每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。appendfsync no
,redis 不主动进行同步,把同步时机交给操作系统。♀️如何从备份文件中恢复数据呢?
AOF 的备份机制和性能虽然和 RDB 不同, 但是备份和恢复的操作同 RDB 一样,都是在需要恢复时将 .aof
文件放到 redis 工作目录下,启动系统即加载,redis 会自动完成数据的恢复。
如果同时开启了 AOF 和 RDB,redis 默认取 AOF 的数据进行恢复。
♀️优点 & 缺点:
.aof
文件可读,可以手动修改 .aof
文件来处理误操作。redis 系列专栏:Redis 快速入门
❤整理不易❤ 还请各位读者老爷们三连支持一下╰( ̄ω ̄o)