【Redis持久化】AOF持久化实验
文章目录
8.1 学习内容
- AOF持久化配置
- AOF持久化实验
- AOF rewrite
- AOF 破损文件修复
- AOF和RDB同时工作
8.2 AOF持久化配置
8.2.1 配置打开AOF持久化
AOF持久化默认是关闭的,默认是打开RDB持久化
appendonly yes
8.2.2 配置AOF同步策略(共三种)
- appendfsync always,每次写入一条数据就执行一次fsync,性能太差,严重降低吞吐量。
- appendfsync everysec:每隔一秒执行一次fsync,最常使用配置,性能很高,每秒可以上万。
- appendfsync no:不主动执行fsync,仅仅将数据写入os cache就杀手不管了,然后是不是有自己的策略将数据同步到磁盘
8.3 AOF持久化实战
- 先打开rdb,关闭aof,写入一些数据,然后kill掉redis进程,接着重启redis,查看数据是否还在。
#关闭redis
ps -ef|grep redis
kill -9 1689
#删除redis_6397.pid文件
rm -rf /var/run/redis_6379.pid
# 关闭aof, appendonly no
vi /etc/redis/6379.conf
# 删除/var/redis/6379目录下面的备份文件
rm /var/redis/6379/*
# 重启redis
cd /etc/init.d/
./redis_6379 start
# 设置k1
get k1
set k1 v1
get k1
#退出redis
exit
# 重启redis
ps -ef|grep redis
kill -9 1689
rm -rf /var/run/redis_6379.pid
cd /etc/init.d/
./redis_6379 start
# 验证k1的值是否存在
get k1
# 发现数据没有恢复
关闭aof
- 打开AOF开关,写入一些数据,然后kill掉redis进程,然后重启redis,查看数据是否还存在。
-
打开aof持久化开关
-
aof数据备份
拓展:redis 进程启动的时候,会直接从appendonly.aof中加载所有日志,把内存中的数据恢复过来。
8.4 AOF rewrite
redis中的数据是有限的,很多数据会自动过期,可能会被用户删除,可能会被redis的缓存清除算法删除。总之,当Redis空间不足时,会不断淘汰掉旧的数据,会保留一些常用的数据在redis内存里面。
这种情况就会导致一个问题:redis中的数据会因为空间问题,不断删除,但是AOF文件不会自动删除数据,就会导致AOF文件不断增大,即redis已删除的数据也会保存在AOF日志文件中。
所有AOF会自动在后头每个一定事件做rewrite操作,比如日志已经存储了100w数据,但是redis内存只剩下10万数据;通过rewrite命令,就会基于内存中当前的10w数据构建一套最新的日志到AOF中;覆盖之前的老日志,保证和redis内存数据量一致。
8.4.1 配置rewrite策略
# 超过AOF日志大小的百分之多少,就进行rewrite
auto-aof-rewrite-percentage 100
# AOF最大大小
auto-aof-rewrite-min-size 64mb
比如上一次AOF rewrite之后,是128mb,
然后就会接着128m继续写AOF日志,发现增长的比例,超过了100%,即256m,就可能触发一次rewrite。
此时还要跟 min-size 64m去比较,256mb > 64mb,才会去触发rewrite
8.4.2 rewrite 原理
- redis fork一个子进程
- 子进程基于当前内存中的数据,构建新的aof日志文件,开始往一个临时的AOF文件中写入日志。
- redis主进程,介绍到client新的写操作之后,在内存中写入日志,同时写新的日志文件,也往旧的aof日志文件中吸入数据
- 子进程写完新的日志文件之后,redis主进程会将内存中新日志再次追加到新的aof文件中
- 最后会将新的日志文件替换掉旧的日志文件
8.5 AOF破损文件的修复
redis-check-aof --fix appendonly.aof
8.6 AOF和RDB同时工作
-
rdb 执行 快照文件的时候,redis 不会去执行 aof rewrite操作;redis在执行 aof rewrite时,就不会执行执行 rdb 快照操作。
-
rdb 在执行生成快照文件操作时,如果redis想执行 aof rewrite操作,只有等rdb 备份完快照文件时,才会去执行 aof rewrite。
-
在redis重启的时候,如果redis备份目录下面同步包含 rdb 快照文件 和 aof 日志文件,会有些使用 aof日志文件,一般来讲,aof日志文件数据比 rdb快照文件数据完整。
参考石衫老师 《亿级流量电商详情页系统》课程笔记
亲,如果觉得还不错,点个赞呗!!!