0
点赞
收藏
分享

微信扫一扫

5、Redis持久化--AOF

AOF

类似于mysql的二进制日志,只要数据变化,就会写,数据的变化都能够完整的保存在二进制日志里面

aof的逻辑和它是一样的,所有数据的更新都会实时的保存到AOF文件里面,在一定程度上确保数据不丢失

AOF工作原理

AOF即AppendOnlyFile, AOF 和 RDB 都采有COW机制。AOF可以指定不同的保存策略,默认为每秒钟执行一次 fsync,按照操作的顺序地将变更命令追加至指定的AOF日志文件尾部,写入速度快

在第一次启用AOF功能时,会做一次完全备份,后续将执行增量性备份,相当于完全数据备份+增量变化

如果同时启用RDB和AOF,进行恢复时,默认AOF文件优先级高于RDB文件,即会使用AOF文件进行恢复

在第一次开启AOF功能时,会自动备份所有数据到AOF文件中,后续只会记录数据的更新指令

如何不丢数据的情况下开启AOF,开启的瞬间做备份

127.0.0.1:6379> config get appendonly
1) "appendonly"
2) "no"
127.0.0.1:6379> config set appendonly yes
OK

查看数据保存情况
[root@ubuntu2004 ~]#ll /apps/redis/data/appendonlydir/
修改配置文件
[root@ubuntu2004 ~]#vim /apps/redis/etc/redis.conf
appendonly yes
[root@ubuntu2004 ~]#systemctl restart redis.service

再次查看数据有没有保存
[root@ubuntu2004 ~]#ll /apps/redis/data/appendonlydir/

误删除redis数据库,利用AOF找回

127.0.0.1:6379> dbsize
(integer) 10000
127.0.0.1:6379> flushall
OK
127.0.0.1:6379> dbsize
(integer) 0

再增加一些数据观察文件变动
127.0.0.1:6379> set car benz
OK
同时观察变化
[root@ubuntu2004 ~]#tail -f /apps/redis/data/appendonlydir/appendonly.aof.1.incr.aof 
*2
$6
SELECT
$1
0
*1
$8
flushall
*3                *开头的为一条记录
$3
set
$3
car
$4
benz

先停止redis服务,进入这个文件,把删库的这个命令删除掉
vim /apps/redis/data/appendonlydir/appendonly.aof.1.incr.aof
*2
$6
SELECT
$1
0
*3
$3
set
$3
car
$4
benz
启动服务
systemctl start redis6379.service 
127.0.0.1:6379> dbsize
(integer) 10001
原来的和新增加的都找回来了

AOF数据不管是删除数据还是增加数据,原内容不覆盖,是在后面追加数据导致文件是越来越大的,可以开启AOF rewrite重写功能(清理垃圾信息只保留有效数据)

将一些重复的,可以合并的,过期的数据重新写入一个新的AOF文件,从而节约AOF备份占用的硬盘空间,也能加速恢复过程 
可以手动执行bgrewriteaof 触发AOF,第一次开启AOF功能,或定义自动rewrite策略

进行清理:redis-cli bgrewriteaof

AOF 相关配置

appendonly no           #是否开启AOF日志记录,默认redis使用的是rdb方式持久化
appendfsync everysec    #aof持久化策略的配置
#no表示由操作系统保证数据同步到磁盘,Linux的默认fsync策略是30秒,最多会丢失30s的数据
#always表示每次写入都执行fsync,以保证数据同步到磁盘,安全性高,性能较差
#everysec表示每秒执行一次fsync,可能会导致丢失这1s数据,此为默认值,也生产建议值

# aof rewrite相关配置 
no-appendfsync-on-rewrite yes   #关注性能设置yes,关注安全设置及no
auto-aof-rewrite-percentage 100 #增长超过指定百分比例时,重写aof文件
auto-aof-rewrite-min-size 64mb #触发aof rewrite的最小文件大小
aof-load-truncated yes   #是否加载由于某些原因导致的末尾异常的AOF文件(主进程被kill/断电等), 建议yes

redis里面有哪些持久化保存方案?讲讲各自的优缺点

RDB:数据全存,保存时间间隔长,容易丢数据,默认开启

AOF:第一次开启全存,后续为追加,存的速度快,但加载速度慢,需要读出来,1s存一次,更安全,可以利用文本机制恢复误删除的内容,默认不开启,优先生效,只加载AOF文件

RDB和AOF建议都开启

举报

相关推荐

0 条评论