🐯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
:代表由两个元素组成,分别是SELECT
和0
(SELECT 0
就是选择0号库
,Redis默认
有16
个库)
$
:描述这个元素由几个字节组成 例如$6
:代表SELECT
为6
个字节 ,那么$1
就代表0
为1
个
那现在我想把这个存储到
rdb文件
中应该怎么操作?
在Redis客户端
执行bgsave
命令触发RDB
操作
127.0.0.1:6379> bgsave
Background saving started
我们切回到Linux指令窗口查看文件列表,多出了
dump.rdb
文件
再切到Redis服务窗口可以看到输出了
RDB操作日志
可以看到当前PID
为25275
的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.aof
和dump.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