AOF持久化存储
AOF持久化存储是什么
AOF持久化存储便是以日志的形式将redis存储在缓冲区中的数据写入到磁盘中 。简而言之 , 就是记录redis的操作日志 , 将redis执行过的命令记录下载 , 当我们需要数据恢复时 , redis去重新执行一次日志文件中的命令.
如何配置持久化存储
// 将no改为yes , 控制aof开启与否appendonly no// 控制aof文件名称 , 存储的目录便是dir配置项appendfilename "appendonly.aof"// 三种备份策略(三者只需要开启以一个即可)# appendfsync always // 命令写入立即写入磁盘appendfsync everysec // 每秒实现文件的同步 , 写入磁盘# appendfsync no // 随机进行文件的同步,同步操作则交给操作系统来负责 , 通常时间是最长30s
AOF持久化存储实现原理
aof日志追加方式实现持久化存储 , 需要经历如下四个过程.命令写入->文件同步->文件重写->文件重载
1.redis命令写入 , 此时会将redis命令写入换从区. 2.缓冲区中数据根据备份策略实现写入日志文件. 3.当aof的文件越来越庞大 , 会根据我们的配置策略来实现aof的重写 , 实现文件的压缩 , 减少体积. 4.当redis重新启动时 , 在去重写加载aof文件 , 达到数据恢复的目的.
命令写入
命令写入主要是将文件执行过的命令写入到日志文件中.并且日志文件尊徐文本协议格式 , 下面示例代码便是aof日志文件中存储的内容格式.
*3\r\n$3\r\nset\r\n$5\r\nhello\r\n$5\r\nworld\r\n
aof采用的是文本协议格式 。主要是原因根据资料提示 , 可以能使由于如下原因. 1.文本协议的兼容性好.前面我们提及到了rdb文件是进行二进制加密 , 可能不同版本之间会出现不兼容的情况 , 采用文本协议可以加避免该问题 。同时文本协议也可以减少跨平台使用所带来的诸多问题. 2.可读性强.由于aof是将命令写入文件中 , 我们可以直接查看命令内容 , 同时也可以修改日志文件内容. 3.开启aof后 , 所有的文件文件都包含追加操作 , 直接采用文本协议 , 减少二次开销(这一点 , 个人不是很理解.因为我们的aof是保存的是命令 , 当我们再次去加载的时候 , 会去执行一次里面的命令 , 当文件大的时候应该是比较耗时的吧 。如果没有做好文件重写策略 , 大量重复无效的命令执行 , 对于二进制加密的rdb格式 , 不需要再去转换 , 这一点确实可以减少二次开销).
文件写入
文件写入是将缓冲区的命令写入到文件中.文件写入的策略有如下三种方式
配置项
配置说明
命令写入到缓冲区中之后立即调用系统的fsync操作同步到aof文件中 , fsync完成后线程返回.
命令写入到缓冲区后每隔一秒调用系统的write操作 , write完成后线程返回.
no
命令写入缓冲区后调用系统write操作 , 不对aof文件做fsync同步 , 同步硬盘操作由系统操作完成 , 时间一般最长为30s.
系统调用write和fsync说明:
·write操作会触发延迟写(write) 机制 。Linux在内核提供页缓冲区用来提高硬盘IO性能 。write操作在写入系统缓冲区后直接返回 。同步硬盘操作依赖于系统调度机制 , 例如: 缓冲区页空间写满或达到特定时间周期 。同步文件之前 , 如果此时系统故障宕机 , 缓冲区内数据将丢失.
- 二、Redis持久化
- 深入详解Redis持久化操作
- No package redis available
- 1kb可以存储多少个汉字
- 数据结构— 基本概念、逻辑和存储结构、数据类型与操作、算法特性与时间复杂度
- 一个全文检索引擎的架构 是基于开发的分布式存储检索引擎,用
- 文件存储空间管理
- 2kb可以存储多少个汉字
- 用于大量文本数据压缩存储 ChatGPT刷力扣面试题 01.06.字符串压缩
- 科技领域10个热门赛道:机器人、光通信、存储芯片、国资云等等 世界十大赛道