·fsync针对单个文件操作( 比如AOF文件) , 做强制硬盘同步 , fsync将阻塞直到写入硬盘完成后返回 , 保证了数据持久化.
文件写入策略分析
配置为时 , 每次写入都要同步AOF文件 , 在一般的SATA硬盘上 , Redis只能支持大约几百TPS写入 , 显然跟Redis高性能特性背道而驰 ,
不建议配置.
配置为no 。由于操作系统每次同步AOF文件的周期不可控 , 而且会加大每次同步硬盘的数据量 , 虽然提升了性能 , 但数据安全性无法保证.
配置为 。是建议的同步策略 , 也是默认配置 , 做到兼顾性能和数据安全性 。理论上只有在系统突然宕机的情况下丢失1秒的数据.
文件重载
1.为什么要文件做文件重载操作? 由于aof采用的是日志追加 , 我们redis命令不断的写入 , aof文件的体积也也会不断的增加.因此redis引入了aof重写机制达到减小aof文件体积.aof文件重写是把redis进程内的数据转换为写命令同步到新的aof文件的过程(这一点其实不是特别明白 , 文件重写不是针对aof文件文件做操作的吗?为什么这里是将redis进程内的数据转换为命令写入文件 , 这里的进程内的数据不是太明白 , 还有待深入研究.个人理解的就是将旧的aof文件内容根据重写策略 , 进行优化生成新的aof文件 。). 2.文件重载有什么好处? 文件重载主要优化的地方有如下三点 。使用文件重载既可以减少文件的体积 , 同时去掉了一些无效的操作 , 可以加快文件重载效率. a.将一些在进程内无效的数据不在写入新的文件.如过期的键. b.去掉一些无效的命令.如del key1. c.简化操作.如lpush list a,lpush list b.直接可以简化为lpush list a b. 3.文件重载由那些方式? 文件重载有自动触发机制和手动触发机制. 手动触发机制:直接使用命令即可.该命令在fork子进程的时候会发生阻塞. 自动触发机制: auto-aof--min-size:aof重写时文件最小的体积 , 默认的是64M. auto-aof--:代表当前AOF文件空间( ) 和上一次重写后AOF文件空间( ) 的比值.
自动触发时机=aof_current_size>auto-aof-rewrite-minsize&&( aof_current_size-aof_base_size) /aof_base_size>=auto-aof-rewritepercentage
其中和可以在info 统计信息中查看. 4.文件重载实现的原理是怎样的?
1.执行重写命令 , 判断是否存在子进程 。如果已经有子进程在进行aof重写 , 则会提示如下信息.
ERR Background append only file rewriting already in progress
如果已经存在子进程在进行操作 , 重写命令会延迟到命令完成之后进行 , 会返回如下信息.
Background append only file rewriting scheduled
2.父进程会fork一个子进程 , 在fork子进程的过程中会造成阻塞. 3.fork子进程结束阻塞解除 , 进行其他新的命令操作.新的命令依旧根据文件写入策略同步数据,保证aof机制正确进行(图中3.1). 4.子进程在进行写的过程中 , 由于fork操作运用的是写时复制技术 , 子进程只能共享fork操作时内存保留的数据 , 新的数据是无法操作的.父进程在这过程中仍然在响应其他的命令 , 于是Redis会使用aof重写缓存区来保存这部分新的数据(图中3.2). 5.子进程进行根据重写规则将数据写入到新的aof文件中 , 并且每次写入有大小限制,通过aof---fsync配置项来控制 , 默认是32M,这样可以见减少单次刷盘(I/O写)造成硬盘阻塞. 6.子进程在完成重写之后 , 会向父进程发送信息 , 父进程更新统计信息.可参看info 下的aof_*相关统计 。7.父进程会把新写入存在aof重写缓冲区的数据写入到aof文件中(图5.2). 8.将新的aof文件替换掉旧的aof文件. 在第3和4中 , 其实不是特别理解.不理解的是为什么父进程在响应新的命令会写入旧的aof文件 , 还要aof重写缓存区.个人理解的是 , 父进程在进行新命令写入处理的策略是 , 按照正常的备份策略写入旧的aof的同时也把新的命令写入重写缓冲区 , 在第5.2中将这部分新的数据写入到新的aof文件中,这样保证数据的完整性.
- 二、Redis持久化
- 深入详解Redis持久化操作
- No package redis available
- 1kb可以存储多少个汉字
- 数据结构— 基本概念、逻辑和存储结构、数据类型与操作、算法特性与时间复杂度
- 一个全文检索引擎的架构 是基于开发的分布式存储检索引擎,用
- 文件存储空间管理
- 2kb可以存储多少个汉字
- 用于大量文本数据压缩存储 ChatGPT刷力扣面试题 01.06.字符串压缩
- 科技领域10个热门赛道:机器人、光通信、存储芯片、国资云等等 世界十大赛道