前言
最近学习 Redis6.x,特做笔记以备忘,与大家共学。课程是从私塾在线下载的,他们把架构师课程都放进去了,大家能够去下载学习,不要钱的,地址是 http://t.hk.uy/eK7, 课程很不错,值得学习!要害是不要钱,嘻嘻!
AOF 概述
默认的 AOF 长久化策略是每秒钟 fsync 一次,fsync 是指把缓存中的写指令记录到磁盘中,在这种状况下,Redis 仍能够放弃很高的性能。
当然因为 OS 会在内核中缓存 write 做的批改,所以可能不是立刻写到磁盘上。这样 aof 形式的长久化也还是有可能会失落局部批改。不过能够通过配置文件通知 Redis,想要通过 fsync 函数强制 os 写入到磁盘的机会。
AOF 形式在等同数据规模的状况下,AOF 文件要比 RDB 文件的体积大,因而 AOF 形式的复原速度也要慢于 RDB 形式。
AOF 优缺点
AOF 长处:
更好的爱护数据不失落、性能高、可做紧急复原
AOF 毛病:
文件比 RDB 文件大、写的 QPS 比 RDB 低
AOF 的配置
1:appendonly:是否开启 AOF
2:appendfilename:设置 AOF 的日志文件名
3:appendfsync:设置 AOF 日志如何同步到磁盘,fsync() 调用,用来通知操作系统立刻将缓存的指令写入磁盘,有三个选项:
(1)always:每次写都强制调用 fsync,这种模式下,redis 会绝对较慢,但数据最平安(2)everysec:每秒启用一次 fsync(3)no:不调用 fsync()。而是让操作系统自行决定 sync 的工夫。这种模式下,redis 的性能会最快
4:no-appendfsync-on-rewrite:设置当 redis 在 rewrite 的时候,是否容许 appendsync。因为 redis 过程在进行 AOF 重写的时候,fsync() 在主过程中的调用会被阻止,也就是 redis 的长久化性能临时生效。默认为 no,这样能保障数据安全
5:auto-aof-rewrite-min-size:设置一个最小大小,是为了避免在 aof 很小时就触发重写
6:auto-aof-rewrite-percentage:设置主动进行 AOF 重写的基准值,也就是重写启动时的 AOF 文件大小,如果 redis 自启动至今还没有进行过重写,那么启动时 aof 文件的大小会被作为基准值。这个基准值会和以后的 aof 大小进行比拟。如果以后 aof 大小超出所设置的增长比例,则会触发重写。如果设置 auto-aof-rewrite-percentage 为 0,则会敞开此重写性能
AOF 日志复原
如果在追加日志时,恰好遇到磁盘空间满或断电等状况,导致日志写入不残缺,也没有关系,Redis 提供了 redis-check-aof 工具,能够用来进行日志修复,根本步骤如下:
1:备份被写坏的 AOF 文件
2:运行 redis-check-aof –fix 进行修复
3:用 diff - u 来看下两个文件的差别,确认问题点
4:重启 redis,加载修复后的 AOF 文件
AOF 重写
AOF 采纳文件追加形式,这会导致 AOF 文件越来越大.
为此,Redis 提供了 AOF 文件重写(rewrite)机制,即当 AOF 文件的大小超过所设定的阈值时,Redis 就会启动 AOF 文件的内容压缩,只保留能够复原数据的最小指令集。
能够应用命令 bgrewriteaof
AOF 重写的触发机制
Redis 是这样工作的:
Redis 会记录上次重写时的 AOF 大小。
如果自启动至今还没有进行过重写,那么启动时 AOF 文件的大小会被作为基准值,这个基准值会和以后的 AOF 大小进行比拟,如果以后 AOF 大小超出所设置的增长比例,则会触发重写。
另外,你还须要设置一个最小大小,是为了避免在 AOF 很小时就触发重写
AOF 重写的基本原理
1:在重写开始前,redis 会创立一个“重写子过程”,这个子过程会读取现有的 AOF 文件,并将其蕴含的指令进行剖析压缩并写入到一个临时文件中。
2:与此同时,主过程会将新接管到的写指令一边累积到内存缓冲区中,一边持续写入到原有的 AOF 文件中,这样做是保障原有的 AOF 文件的可用性,防止在重写过程中出现意外。
3:当“重写子过程”实现重写工作后,它会给父过程发一个信号,父过程收到信号后就会将内存中缓存的写指令追加到新 AOF 文件中
4:当追加完结后,redis 就会用新 AOF 文件来代替旧 AOF 文件,之后再有新的写指令,就都会追加到新的 AOF 文件中
5:重写 aof 文件的操作,并没有读取旧的 aof 文件,而是将整个内存中的数据库内容用命令的形式重写了一个新的 aof 文件,这点和快照有点相似
RDB+AOF 混合形式概述
RDB+AOF 的混合形式是:先应用 RDB 进行快照存储,而后应用 AOF 长久化记录所有的写操作,当重写策略满足或手动触发重写的时候,将最新的数据存储为新的 RDB 记录。
这样的话,重启服务的时候会从 RDB 和 AOF 两局部复原数据,既保证了数据完整性,又进步了复原数据的性能。
开启混合形式:
设置 aof-use-rdb-preamble 的值为 yes
数据的复原程序
1:判断是否开启 AOF 长久化,若开启了 AOF,则应用 AOF 长久化文件复原数据
2:如果 AOF 文件不存在,否则应用 RDB 长久化文件复原数据
3:如果 AOF 文件和 RDB 文件都不存在则间接启动 Redis
4:如果 AOF 或 RDB 文件呈现谬误,则启动失败返回错误信息
后记
我会继续的把我学习 Redis6.x 过程的笔记记录下来,跟大家一起学习。心愿能坚持下去!