Skip to main content

Redis6.x学习笔记(三)持久化之AOF

Redis6.x学习笔记(三)持久化之AOF - Hi friends, I hope you are all in good healthkanakoroku, In the article you are reading this time with the title Redis6.x学习笔记(三)持久化之AOF , We have prepared this article well for you to read and take information in it. hopefully the contents of the post what we write you can understand. ok, happy reading.

Title : Redis6.x学习笔记(三)持久化之AOF
link : Redis6.x学习笔记(三)持久化之AOF

Baca juga


Redis6.x学习笔记(三)持久化之AOF

前言


最近学习Redis6.x,特做笔记以备忘,与大家共学。前面已经发布了Redis6.x学习笔记(一)Redis基础和数据类型  和 Redis6.x学习笔记(二)持久化之RDB  ,接着往下写AOF!


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文件都不存在则直接启动Redis4:如果AOF或RDB文件出现错误,则启动失败返回错误信息

后记


我会持续的把我学习Redis6.x过程的笔记记录下来,跟大家一起学习。希望能坚持下去!











原文转载:http://www.shaoqun.com/a/751784.html

跨境电商:https://www.ikjzd.com/

谷歌趋势:https://www.ikjzd.com/w/397

naning9韩国官网:https://www.ikjzd.com/w/2401


前言最近学习Redis6.x,特做笔记以备忘,与大家共学。前面已经发布了Redis6.x学习笔记(一)Redis基础和数据类型和Redis6.x学习笔记(二)持久化之RDB,接着往下写AOF!AOF概述默认的AOF持久化策略是每秒钟fsync一次,fsync是指把缓存中的写指令记录到磁盘中,在这种情况下,Redis仍可以保持很高的性能。当然由于OS会在内核中缓存write做的修改,所以可能不是立即
拍怕:https://www.ikjzd.com/w/2205
google correlate:https://www.ikjzd.com/w/1887
patpat:https://www.ikjzd.com/w/1079
eBay调整SpeedPAK中国大陆至西班牙收寄服务:https://www.ikjzd.com/home/132124
口述:公公乱穿老公睡衣让我尴尬认错人:http://lady.shaoqun.com/m/a/18314.html
速看!美国大选接下来的一些重要时间节点:https://www.ikjzd.com/home/133035


That's the article Redis6.x学习笔记(三)持久化之AOF

That's it for the article Redis6.x学习笔记(三)持久化之AOF this time, hopefully can be useful for all of you. okay, see you in another article post.

You are now reading the article Redis6.x学习笔记(三)持久化之AOF with link address https://kanakoroku.blogspot.com/2021/05/redis6xaof.html
Comment Policy: Please write your comments that match the topic of this page post. Comments containing links will not be displayed until they are approved.
Open Comments
Close Comment