前言
最近学习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文件都不存在则间接启动Redis4:如果AOF或RDB文件呈现谬误,则启动失败返回错误信息
后记
我会继续的把我学习Redis6.x过程的笔记记录下来,跟大家一起学习。心愿能坚持下去!