十五 Redis——Redis 持久化之 RDB 机制 和 AOF 机制

文章目录
Redis(十五)——Redis 持久化之 RDB 机制 和 AOF 机制
由于Redis的数据都存放在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失 。如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据 。
【十五Redis——Redis 持久化之 RDB 机制 和 AOF 机制】redis提供两种方式进行持久化,一种是RDB(Redis )持久化(原理是将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb),另外一种是AOF( only file)持久化(原理是将Reids的操作日志以追加的方式写入文件) 。
1、RDB(快照) 持久化
什么是RDB持久化
RDB持久化是指在指定的时间间隔内将内存中的所有数据快照写入磁盘 。也是默认的持久化方式,这种方式是就是把内存中数据以快照的形式保存在磁盘上写入到二进制文件中,默认的文件名为dump.rdb 。
什么是快照呢,你可以理解成把当前时刻的数据拍成一张照片保存下来 。
触发RDB持久化的三种机制
1、save触发方式
该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止 。具体流程如下:
2、触发方式
执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求 。具体流程如下:
上面两种是手动让 Redis 进行数据集保存操作 。
3、自动触发
自动触发是由我们的 redis.conf 配置文件来完成的 。关于自动触发的配置,在Redis(十四)——Redis 6.0.12 配置文件详解中已详细说明 。
自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次命令 。注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化 。
RDB快照的运作方式
当 Redis 需要保存 dump.rdb 文件时,服务器执行以下操作:
Redis 调用 fork(),同时拥有父进程和子进程 。子进程将数据集写入到一个临时 RDB 文件中 。当子进程完成对新 RDB 文件的写入时,Redis 用新 RDB 文件替换原来的 RDB 文件,并删除旧的 RDB 文件 。
这种工作方式使得 Redis 可以从写时复制(copy-on-write)机制中获益 。
RDB 的优缺点
优点
缺点
测试 RDB 持久化机制
1、在 redis.conf 配置文件中配置触发 Redis的 RDB 持久化条件:这种触发机制是自动触发
2、在redis的启动目录下,可以看见已经存在一个RDB文件:dump.rdb,把它删掉:
3、设置5个key到内存中,这个时候就触发了我们配置的持久化条件
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 k4 v4 k5 v5OK
发现在redis的启动目录下,重新出现了一个dump.rdb持久化文件
4、再次删除掉 dump.rdb
5、在redis 客户端执行命令,发现在redis的启动目录下,又重新出现了一个dump.rdb持久化文件

十五  Redis——Redis 持久化之 RDB 机制 和 AOF 机制

文章插图
命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了命令之后,则会触发自动持久化 。
6、再再次删除掉 dump.rdb
7、在客户端执行命令关闭服务器:
127.0.0.1:6379> shutdownnot connected> exit
检查是否关闭,并且重新开启redis服务器:redis
redis服务器已开启 。
测试客户端连接:
8、客户端成功连接上redis服务器 。发现在redis的启动目录下,又又重新出现了一个dump.rdb持久化文件: