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建议都开启