手把手带你实操 【RDB & AOF】 (保姆级)

本文详述Redis的RDB与AOF持久化机制,通过实例演示如何配置、操作及理解这两种持久化方式。内容涵盖RDB的bgsave操作,AOF的重写机制,以及RDB+AOF混合模式下的工作原理。通过实践,读者可以深入理解Redis的数据持久化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


🐯Redis系列🐯:

🐯Redis安装教程(保姆级详细图文)
🐯布隆过滤器安装步骤
🐯小记一手 “Redis持久化机制”
🐯手把手带你实操 RDB & AOF
🐯带你 “亲自体验“ Redis主从复制
🐯“Redis哨兵“一撸到底 ,贼爽~
🐯“Redis代理“之Twemproxy


🐯温馨提示🐯:

本文所涉及操作围绕单进程单实例版(单机版)Redis,集群相关后期逐步更新。。。文中有关于Redis配置文件路径等需按自己个人服务器实际路径为准 !!或根据Redis详细安装图文教程一文重新安装一个干净的环境来操作~


RDB

查看后台是否运行了Redis服务

ps -ef | grep redis

在这里插入图片描述

停止所有Redis服务

service redis_6379 stop
service redis_xxxx stop
...

保证后台没有任何Redis服务在运行

ps -ef | grep redis

在这里插入图片描述

为了方便观看日志,我们需要将Redis设置为前台服务形式,需要将daemonize配置关掉,将日志文件配置关掉,让日志显示在前台

vi /etc/redis/6379.conf

找到GENERAL模块,将daemonize yes改为daemonize no
logfile /var/log/redis_6379.log配置注释掉#logfile /var/log/redis_6379.log

在这里插入图片描述

暂时关闭RDB+AOF混合(v4.0后新特性),将aof-use-rdb-preamble yes修改为aof-use-rdb-preamble no

在这里插入图片描述
清除一下相关文件

 cd /var/lib/redis/6379/
 
 ls

在这里插入图片描述

删除dump.rdb文件包括其他文件(如果有的话)

rm -rf ./*

🐯经过一番设置清理,还原了一个干净的服务
🐯再开一个窗口来启动Redis
因为我们把Redis服务切换到前台运行了,所以在运行Redis服务后处于阻塞模式不能当前窗口中继续操作Linux命令,所以需要再开一个窗口来操作Linux指令

redis-server /etc/redis/6379.conf

回到刚刚的窗口中,查看我们刚清完的那个文件列表

ls -ll 

我们发现没有再生成dump.rdb文件了

在这里插入图片描述

而此时查看appendonly.aof文件,其中内容都是空的,因为这时还没有发生任何操作

在这里插入图片描述

接下来我们再打开一个新窗口,用来做连接Redis的客户端

redis-cli -a 密码

此时我们就开了三个窗口分别干三件不同的事情

在这里插入图片描述

在客户端进行key set操作

127.0.0.1:6379> set k1 hello
OK

重新打开appendonly.aof文件查看,此时已经记录了刚才执行的操作

在这里插入图片描述

*:代表下面由多少个元素组成,例如*2:代表由两个元素组成,分别是 SELECT0SELECT 0就是选择0号库,Redis默认16个库)

$:描述这个元素由几个字节组成 例如$6:代表SELECT6个字节 ,那么$1就代表01

那现在我想把这个存储到rdb文件中应该怎么操作?
Redis客户端执行bgsave命令触发RDB操作

127.0.0.1:6379> bgsave
Background saving started

我们切回到Linux指令窗口查看文件列表,多出了dump.rdb文件

在这里插入图片描述

再切到Redis服务窗口可以看到输出了RDB操作日志
可以看到当前PID25275的Redis进程已经通过写时复制的方式成功存储到了磁盘

在这里插入图片描述

vi暴力查看dump.rdb文件内容

vi dump.rdb

可以看到文件开头有REDIS的则为RDB的二进制内容

在这里插入图片描述

但是这个内容好像咱也看不懂啊对吧?那怎么让他显示成我们能看懂的内容呢?
redis-check-rdb 指令

[root@rhys 6379]# redis-check-rdb dump.rdb 

#检查dump.rdb这个文件
[offset 0] Checking RDB file dump.rdb
[offset 26] AUX FIELD redis-ver = '6.0.6'
[offset 40] AUX FIELD redis-bits = '64'
[offset 52] AUX FIELD ctime = '1647165322'
[offset 67] AUX FIELD used-mem = '874864'
[offset 83] AUX FIELD aof-preamble = '0'
[offset 85] Selecting DB ID 0
[offset 107] Checksum OK
[offset 107] \o/ RDB looks OK! \o/
#有1个key
[info] 1 keys read
#设置了过期时间的key个数
[info] 0 expires
#已经过期的有几个
[info] 0 already expired

AOF

AOF重写

在Redis客户端对key1进行多次set操作

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> set k1 bbb
OK
127.0.0.1:6379> set k1 ccc
OK

查看appendonly.aof文件中多了刚才的多次set操作记录

在这里插入图片描述

其实这时候AOF文件中记录的指令很多都是过时的,因为最终咱们key1 'ccc',那么现在该考虑一件事情,如果这个文件非常大,而又有很多类似这种过时的指令该怎么办呢,我们该怎么把AOF文件体积缩小呢?

我们先切到Linux指令窗口查看一下当前AOF文件大小

ls -ll

当前AOF文件为687字节

在这里插入图片描述

切到Redis客户端窗口执行BGREWRITEAOF指令

127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started

再切到Linux指令窗口查看一下重写后的AOF文件大小

重写后的AOF文件大小为53字节

在这里插入图片描述

查看重写后的 appendonly.aof文件内容

   vi appendonly.aof

在这里插入图片描述

  • 由于我们开始的时候暂时关闭了RDB+AOF混合,所以此刻是满足了v4.0前的重写特点:

    • 删除抵消的命令
    • 合并重复的命令

这样做的好处就是方便将来加载的时候速度变快不用执行那些毫无意义的指令

接下来我们再来看看v4.0以后RDB+AOF混合的新特性
Ctrl+C退出当前Redis服务
Exit退出当前Redis客户端

清除appendonly.aofdump.rdb文件

rm -rf /var/lib/redis/6379/*

将配置文件中RDB+AOF混合再开启,将aof-use-rdb-preamble no修改为aof-use-rdb-preamble yes

vi /etc/redis/6379.conf

在这里插入图片描述

重启Redis服务

redis-server /etc/redis/6379.conf

重新开启Redis客户端

redis-cli -a 密码

执行几笔写操作

127.0.0.1:6379> set k1 aaa
OK
127.0.0.1:6379> set k1 bbb
OK
127.0.0.1:6379> set k1 ccc
OK
127.0.0.1:6379> set k1 ddd
OK
127.0.0.1:6379> set k1 eee
OK

查看appendonly.aof文件

vi appendonly.aof 

在这里插入图片描述

此时到Redis客户端执行BGREWRITEAOF指令

127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started

重新打开appendonly.aof文件查看

因为咱们开启了RDB+AOF混合,所以AOF文件此时变为了RDB的前导

在这里插入图片描述

那什么是增量追加日志呢?

到Redis客户端再操作两笔写操作

127.0.0.1:6379> set k1 fff
OK
127.0.0.1:6379> set k1 ggg
OK

这两条记录成功后将会以明文的方式追加AOF文件

再次打开appendonly.aof文件查看

在这里插入图片描述

前面是二进制RDB,加快恢复速度

后执行的指令在RDB时点之后追加到日志文件中的新增记录

这就是我们所说的增量日志+全量时点数据

咱们再来落一个RDB对比一下AOF

Redis客户端执行BGSAVE指令

 127.0.0.1:6379> BGSAVE
 Background saving started

再执行BGREWRITEAOF指令

127.0.0.1:6379> BGREWRITEAOF
Background append only file rewriting started 

查看Linux指令窗口中的文件列表

发现 RDB文件AOF文件所占相同字节数

在这里插入图片描述

再来看appendonly.aof文件和dump.rdb内容

此时两个文件中内容都是k1进行的set操作

vi appendonly.aof

在这里插入图片描述

vi dump.rdb 

在这里插入图片描述

🐯结尾语🐯:本期RDB/AOF实操教程就到这里了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倪倪N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值