3、redis持久化-RDB和AOF

1、RDB模式

RDB:基于时间的快照,默认值保留当前最新的一次快照,优点是执行速度快,缺点是可能会丢失从上次快照到当前时间未做快照的数据。

1.1、RDB原理

1.2、RDB相关配置

save 900 1
save 300 10
save 60 10000
dbfilename dump_6379.rdb
dir /apps/redis/data
stop-writes-on-bgsave-error yes
rdbcompression yes # 是否启用压缩
rdbchecksum yes  # 是否开启RC64校验

1.3、生成RDB快照的三种方法

  • save:会造成阻塞,不推荐

  • bgsave:异步后台执行,不影响其他命令执行,推荐

  • 自动 :制定规则,自动执行

1.3.1、观察自动保存

[root@centos7 ~]#vim /apps/redis/etc/redis.conf
save 60 3 

#测试60s内修改3个key,验证是否生成RDB文件

1.3.2、观察bgsave

[root@vms228 ~]# redis-cli -a redis bgsave

127.0.0.1:6379> info Persistence
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0            # 为0代表备份完成
rdb_last_save_time:1644979739
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:237568
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0

1.4、RDB模式优缺点

优点:
    RDB快照保存某个时间点的数据,用过bgsave备份。
    备份时父进程只需要fork出子进程,来处理备份任务,最大化redis性能。
    RDB在大量数据时恢复速度比AOF快。

缺点:
    不能实时保存数据,不适用于服务器故障时数据丢失恢复。一旦故障,可能会丢失好几分钟的数据。
    数据量非常大且cpu紧张时,fork可能非常耗时(长达一秒或者更久)

1.5、手动备份RDB文件

#!/bin/bash
. /etc/init.d/functions
BACKUP=/backup/redis-rdb
DIR=/apps/redis/data
FILE=dump_6379.rdb
PASS=redis
redis-cli -h 127.0.0.1 -a $PASS --no-auth-warning bgsave
result=`redis-cli -a $PASS --no-auth-warning info Persistence |grep rdb_bgsave_in_progress| sed -rn 's/.*:([0-9]+).*/\1/p'`
echo $result
until [ "$result" == 0 ];do
        sleep 1
        result=`redis-cli -a $PASS --no-auth-warning info Persistence |grep rdb_bgsave_in_progress| sed -rn 's/.*:([0-9]+).*/\1/p'`
done
DATE=`date +%F_%H-%M-%S`
[ -e $BACKUP ] || { mkdir -p $BACKUP ; chown -R redis.redis $BACKUP; }
mv $DIR/$FILE $BACKUP/dump_6379-${DATE}.rdb
action "Backup redis RDB"

2、AOF

AOF 和 RDB 一样使用了写时复制机制,AOF默认为每秒钟 fsync一次,即将执行的命令保存到AOF文件当中,
这样即使redis服务器发生故障的话最多只丢失1秒钟之内的数据,也可以设置不同的fsync策略always,
即设置每次执行命令的时候执行fsync,fsync会在后台执行线程,所以主线程可以继续处理用户的正常请求而
不受到写入AOF文件的I/O影响

注意:如果同时开启了AOF和RDB,AOF的优先级高于RDB的优先级。

AOF 模式默认是关闭的,第一次开启AOF后,并重启服务生效后,会因为AOF的优先级高于RDB,而
AOF默认没有文件存在,从而导致所有数据丢失

2.1、如何正确开启AOF?(重要,第一次开启不能直接修改配置文件)

# 当前采用了RDB备份数据
[root@vms228 ~]# tree /apps/redis/data/
/apps/redis/data/
├── dump_6379.rdb
├── dump_6380.rdb
└── dump_6381.rdb
[root@vms228 ~]# redis-cli -a redis config get appendonly
1) "appendonly"
2) "no"

# 切换AOF时,需要先将RDB文件转换成AOF文件
[root@vms228 ~]# tree /apps/redis/data/
/apps/redis/data/
├── appendonly_6379.aof
├── dump_6379.rdb
├── dump_6380.rdb
└── dump_6381.rdb

[root@vms228 data]# vim /apps/redis/etc/redis_6379.conf
appendonly yes
appendfilename "appendonly_6379.aof"
appendfsync always
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes

2.2、AOF rewrite重写

将一些重复的,可以合并的,过期的数据重新写入一个新的AOF文件,从而节约AOF备份占用的硬盘空间,也能加速恢复过程

127.0.0.1:6379> set zhaozhijie zhaozhijie
OK
127.0.0.1:6379> set zhaozhijie zzj
OK
# 整理aof文件
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

2.3、AOF模式的优缺点

2.3.1、优点

数据安全性较高,及时flushall删除了整个数据库,appendonly.aof文件依旧存在。而RDB文件数据就不存在了。

 AOF文件体积过大时,支持对AOF进行重写,重写操作绝对安全

[root@vms228 data]# ll -h /apps/redis/data/
总用量 33M
-rw-r--r-- 1 redis redis 17M 2月  16 14:05 appendonly_6379.aof
-rw-r--r-- 1 redis redis 17M 2月  16 13:59 dump_6379.rdb

[root@vms228 data]# redis-cli -a redis
127.0.0.1:6379> flushall
OK

[root@vms228 data]# ll -h
总用量 17M
-rw-r--r-- 1 redis redis 17M 2月  16 14:16 appendonly_6379.aof   # 数据依旧存在
-rw-r--r-- 1 redis redis  92 2月  16 14:17 dump_6379.rdb

# 采用AOF模式执行flushall之后数据如何恢复?
答:编辑aof文件,删除flushall这一行
[root@vms228 data]# vim  appendonly_6379.aof
删除flushall
[root@vms228 data]# systemctl restart redis_6379.service
127.0.0.1:6379> info keyspace
# Keyspace
db0:keys=1000007,expires=0,avg_ttl=0


# 再恢复RDB备份
127.0.0.1:6379> bgsave
Background saving started

[root@vms228 data]# ll -h
总用量 33M
-rw-r--r-- 1 redis redis 17M 2月  16 14:25 appendonly_6379.aof
-rw-r--r-- 1 redis redis 17M 2月  16 14:27 dump_6379.rdb

2.3.2、缺点

重复操作也会记录,占用空间大
回复速度比RDB慢

3、RDB和AOF的选择

只充当缓存数据,生产环境一般只需启用RDB

数据需要持久存储,一点不能丢失,要同时启用RDB和AOF,不能只启用AOF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值