【Redis持久化】AOF持久化实验

【Redis持久化】AOF持久化实验

1. 单机版Redis下载、安装以及生产环境启动方案

8.1 学习内容

  1. AOF持久化配置
  2. AOF持久化实验
  3. AOF rewrite
  4. AOF 破损文件修复
  5. AOF和RDB同时工作

8.2 AOF持久化配置

8.2.1 配置打开AOF持久化

AOF持久化默认是关闭的,默认是打开RDB持久化


appendonly yes

8.2.2 配置AOF同步策略(共三种)

  1. appendfsync always,每次写入一条数据就执行一次fsync,性能太差,严重降低吞吐量。
  2. appendfsync everysec:每隔一秒执行一次fsync,最常使用配置,性能很高,每秒可以上万。
  3. appendfsync no:不主动执行fsync,仅仅将数据写入os cache就杀手不管了,然后是不是有自己的策略将数据同步到磁盘

在这里插入图片描述

8.3 AOF持久化实战

  1. 先打开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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 打开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 原理

  1. redis fork一个子进程
  2. 子进程基于当前内存中的数据,构建新的aof日志文件,开始往一个临时的AOF文件中写入日志。
  3. redis主进程,介绍到client新的写操作之后,在内存中写入日志,同时写新的日志文件,也往旧的aof日志文件中吸入数据
  4. 子进程写完新的日志文件之后,redis主进程会将内存中新日志再次追加到新的aof文件中
  5. 最后会将新的日志文件替换掉旧的日志文件

8.5 AOF破损文件的修复

redis-check-aof --fix appendonly.aof

8.6 AOF和RDB同时工作

  1. rdb 执行 快照文件的时候,redis 不会去执行 aof rewrite操作;redis在执行 aof rewrite时,就不会执行执行 rdb 快照操作。

  2. rdb 在执行生成快照文件操作时,如果redis想执行 aof rewrite操作,只有等rdb 备份完快照文件时,才会去执行 aof rewrite。

  3. 在redis重启的时候,如果redis备份目录下面同步包含 rdb 快照文件 和 aof 日志文件,会有些使用 aof日志文件,一般来讲,aof日志文件数据比 rdb快照文件数据完整。

参考石衫老师 《亿级流量电商详情页系统》课程笔记

亲,如果觉得还不错,点个赞呗!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章