> 文档中心 > 手把手带你实操 RDB & AOF (保姆级)

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



🐯 Redis系列🐯:

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


🐯温馨提示🐯:

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


RDB

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

ps -ef | grep redis

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

停止所有Redis服务

service redis_6379 stopservice redis_xxxx stop...

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

ps -ef | grep redis

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

为了方便观看日志,我们需要将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

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

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

rm -rf ./*

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

redis-server /etc/redis/6379.conf

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

ls -ll 

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

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

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

在这里插入图片描述

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

redis-cli -a 密码

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

在这里插入图片描述

在客户端进行key set操作

127.0.0.1:6379> set k1 helloOK

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

在这里插入图片描述

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

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

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

127.0.0.1:6379> bgsaveBackground saving started

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

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

再切到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 aaaOK127.0.0.1:6379> set k1 bbbOK127.0.0.1:6379> set k1 cccOK

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

在这里插入图片描述

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

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

ls -ll

当前AOF文件为687字节

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

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

127.0.0.1:6379> BGREWRITEAOFBackground append only file rewriting started

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

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

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

查看重写后的 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 aaaOK127.0.0.1:6379> set k1 bbbOK127.0.0.1:6379> set k1 cccOK127.0.0.1:6379> set k1 dddOK127.0.0.1:6379> set k1 eeeOK

查看appendonly.aof文件

vi appendonly.aof 

在这里插入图片描述

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

127.0.0.1:6379> BGREWRITEAOFBackground append only file rewriting started

重新打开appendonly.aof文件查看

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

在这里插入图片描述

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

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

127.0.0.1:6379> set k1 fffOK127.0.0.1:6379> set k1 gggOK

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

再次打开appendonly.aof文件查看

在这里插入图片描述

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

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

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

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

Redis客户端执行BGSAVE指令

 127.0.0.1:6379> BGSAVE Background saving started

再执行BGREWRITEAOF指令

127.0.0.1:6379> BGREWRITEAOFBackground append only file rewriting started 

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

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

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

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

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

vi appendonly.aof

在这里插入图片描述

vi dump.rdb 

在这里插入图片描述

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