7、Redis持久化存储的两种方式

1.Redis持久化存储的两种方式
RDB方式 RDB存储是Redis实现的一种存储机制 (默认开启)
AOF方式 AOF存储方式,直接把操作的命令记录下来,保存到一个文件里,类似mysql的binlog日志 (默认关闭)

2.Redis的RDB持久化存储
Redis默认是开启了RDB快照方式,提供持久化存储的功能
如果只让Redis做缓存的服务,不需要持久化时候,也可以关闭所有存储功能

3.Redis的RDB存储方式的配置,默认是开启的

>config get dir                        #查看存储设置的路径
1) "dir"
2) "/data/redis"
>config get dbfilename           #查看rdb存储的文件名,默认是dump.rdb文件   
1) "dbfilename"
2) "dump.rdb"                      #该文件可以保证redis的数据不丢失

# ls /data/redis/
dump.rdb  redis.log  redis.pid

>config get save                   #查看rdb默认的存储机制配置
3600 1 300 100 60 10000      #3600s(1个小时)   1(key的一个变化)     300s(5分钟)  100(key的变化)    60s(1分钟)  10000(key的变化)
key的变化越快,保存的就越频繁。 60s中 key变化了10000个,那么我1分钟就会给你存上, 1小时才变化一个key,就1小时给你存一次
更新得越频繁,保存得越频繁。另外,关闭redis服务器会立马触发rdb存储  

验证一下rdb持久化存储:
# redis-cli -a redispwd                                                      #登录redis先设置一些数据
> set k1 v1
> set k2 v2
> set k3 v3
> keys *
1) "k3"
2) "k2"
3) "k1"
> quit 
# ls /data/redis/
dump.rdb  redis.log  redis.pid

# systemctl stop redis                                                   #停止redis,将持久化存储文件模拟删除
# mv /data/redis/dump.rdb /data/redis/dump.rdb.bak
# ls /data/redis/
dump.rdb.bak  redis.log
# systemctl start redis                                                 #再重新启动redis
# redis-cli -a redispwd                                                 #发现持久化数据文件删除后,数据丢失
> keys *
(empty array)
> quit
恢复数据:
# systemctl stop redis
# mv /data/redis/dump.rdb.bak /data/redis/dump.rdb
# systemctl start redis
# redis-cli -a redispwd
> keys *
1) "k3"
2) "k1"
3) "k2"

设置关闭rdb:需要先删除dump.rdb文件
>config set save ""                       #关闭rdb快照持久化存储,测试的不好使
>config get save                          #查看
>config rewrite                            #写入配置文件,永久设置                           
>config set rdbcompression no      #rdb文件需不需要压缩,当磁盘空间比较大时候,可以设置不用压缩

通过修改配置文件关闭rdb持久化:  
# vim /etc/redis.conf
save ""                                      #添加
                                               #注释下面的:
#save 3600 1
#save 300 100
#save 60 10000

案例:关闭rdb持久化

rm -f /data/redis/dump.rdb         #先删除rdb快照文件,否则即使关闭持久化,还会通过快照给还原过来
vim /etc/redis.conf
save ""                                        #添加,关闭持久化
systemctl restart redis                #重启redis
redis-cli -a redispwd
> CONFIG GET save                     #查看rdb持久化配置为空
1) "save"
2) ""
> set k11 v11                              #增加几个key的数据
> set k12 v12
> keys *                                      #查看key
1) "k12"
2) "k11"
> quit
systemctl restart redis               #重启redis
redis-cli -a redispwd                  #重新登录redis,发现重启后数据丢失
> keys *    
(empty array)

3.Redis的AOF持久化存储
AOF存储默认是关闭的
AOF存储是把命令直接写入到文件中,文件会不断扩大

1.开启AOF前先关闭RDB(一般建议关闭,持久化存储用其中一种就行),也能同时配置,同时配置AOF优先生效

# vim /etc/redis.conf
save ""                                            #添加
                                                     #注释下面的:
#save 3600 1
#save 300 100
#save 60 10000

2.开启AOF存储方式

>config get append*                        #查看AOF状态,默认是关闭的
1) "appendonly"
2) "no"
>config set appendonly yes               #开启AOF存储
>config rewrite      #写入配置文件

案例:开启AOF存储方式持久化存储

>config get append*                        #查看AOF状态,默认是关闭的
1) "appendonly"
2) "no"
3) "appendfilename"
4) "appendonly.aof"
5) "appendfsync"
6) "everysec"
>config set appendonly yes               #开启AOF存储
>config rewrite                                #写入配置文件
# grep appendonly /etc/redis.conf      #查看redis配置文件
appendonly yes
appendfilename "appendonly.aof"
# ls /data/redis/appendonly.aof         #查看AOF文件的路径
/data/redis/appendonly.aof
# redis-cli -a redispwd                     #登录redis写入测试数据
> set a1 b1
> set a2 b2
> keys *
1) "a2"
2) "a1"
# tail -12 /data/redis/appendonly.aof    #查看AOF文件记录的命令
set
$2
a1
$2
b1
*3
$3
set
$2
a2
$2
b2
# systemctl restart redis                        #重启redis
# redis-cli -a redispwd                           #重新登录redis,数据还在,数据持久化没问题
> keys *
1) "a1"
2) "a2"
> get a1
"b1"

3.AOF存储是把命令直接写入到文件中,文件会不断扩大

>set a b
>set a b
...
ll /data/redis/appendonly.aof              #文件时一直在增大的

4.AOF文件的重写
当AOF文件增大到一定程度,我们可以对他进行重写,重写AOF文件可以减小AOF文件的大小,数据不会减少

5.重写方式有两种:手动重写和自动重写
手动重写:
> BGREWRITEAOF #手动重写AOF文件,重写后AOF文件会减小

自动重写:

> config get *aof*                               #查看自动重写AOF文件的条件,重写后AOF文件会减小
 1) "aof-rewrite-incremental-fsync"
 2) "yes"
 3) "aof-load-truncated"
 4) "yes"
 5) "aof-use-rdb-preamble"
 6) "yes"
 7) "aof_rewrite_cpulist"
 8) ""
 9) "auto-aof-rewrite-percentage"
10) "100"                                         #当达到100%增量的时候会触发AOF重写
11) "auto-aof-rewrite-min-size"
12) "67108864"                                 #AOF文件>67M时候触发AOF重写
13) "replicaof"
14) ""
自动重写的条件:重写条件是aof文件大小>67M,aof文件增大了一倍

案例演示: 手动重写

# ls -l /data/redis/appendonly*         #先查看一下AOF文件的大小
# redis-cli -a redispwd                     #登录下redis,手动触发重写
> BGREWRITEAOF                          #手动重写AOF文件
# ls -l /data/redis/appendonly*         #再查看一下AOF文件的大小,发现会减小

案例演示: 自动重写

# ls -lh /data/redis/appendonly*        #先查看一下AOF文件的大小
刚开始比较小
# redis-benchmark -a redispwd         #使用压测工具触发写入数据,使AOF文件增大    
# ls -lh /data/redis/appendonly*        #不断查看AOF文件的大小,发现逐渐增大,当>67M后,会变小,说明达到触发条件后,进行了自动重写
# ls -lh /data/redis/appendonly*
# ......

注意: 自动触发重写 在业务高峰压力大,如果采用自动触发重写,有可能会影响业务,可选择在压力小的时候脚本运行BGREWRITEAOF

posted @ 2023-03-08 15:20  XingFang  阅读(314)  评论(0编辑  收藏  举报