当前位置: 首页 > news >正文

【Redis】AOF日志

目录

  • 1、背景
  • 2、工作原理
  • 3、核心配置参数
  • 4、优缺点
  • 5、AOF文件内容

1、背景

AOF(Append Only File)是redis提供的持久化机制之一,它通过记录所有修改数据库状态的写命令来实现数据库持久化。与RDB(快照)方式不同,AOF记录的是操作过程而非数据状态。

2、工作原理

AOF的工作原理如下:

1、命令记录:当AOF开启时,redis会将每个写命令追加到AOF缓冲区
2、文件同步:根据配置策略将缓冲去内容写入AOF文件
3、文件重写:定期执行AOF重写以压缩文件大小

3、核心配置参数

AOF在redis.conf的相关配置如下:

[root@xxx]# cat /xxx/redis.conf | grep -E 'append|auto-aof'
appendonly yes #启用AOF持久化
appendfilename "xxx" #AOF文件名,没配置默认文件名为appendonly.aof
appendfsync everysec #同步策略
no-appendfsync-on-rewrite yes #控制AOF重写期间是否执行主进程的fsync同步操作
auto-aof-rewrite-percentage 300 #触发重写的增长比例
auto-aof-rewrite-min-size 1G #触发重写的最小文件大小

同步策略(appendfsync )有三种:

1、always:每个写命令都同步到磁盘,最安全但性能最低
2、everysec(默认):每秒同步一次,平衡安全性和性能
3、no:由操作系统决定同步时机,性能最好但是可能丢失数据

需要注意no-appendfsync-on-rewrite这个配置的作用机制:

<1>当设置为yes时

1、在AOF重写期间,主进程不会调用fsync来同步AOF文件
2、即使配置了appendfsync 也会被暂时忽略
3、可以显著提供重写期间的性能,减少I/O阻塞

<2>当设置为no时

1、在AOF重写期间,主进程仍会按照配置的appendfsync策略同步AOF文件
2、保证更高的数据安全性,但可能会影响重写性能

4、优缺点

AOF的优缺点如下:

优点缺点
数据安全性高:可配置不同级别的同步策略(always/everysec/no)文件体积大:记录所有写命令,长期运行后文件可能远大于RDB
可读性强:AOF文件是纯文本格式,便于人工检查或修复恢复速度慢:重启时需要重新执行所有命令,比RDB加载慢
容错性好:即使文件部分损坏,仍可通过redis-check-aof工具修复写入性能开销:相比RDB,AOF通常有更高的写入负载(取决于同步策略)
实时性高:默认每秒同步,最多丢失1秒数据重写期间可能阻塞:AOF重写时(尤其是大实例)可能短暂影响性能
操作粒度细:记录每个写命令,可精确到命令级别恢复历史兼容性问题:不同redis版本的AOF格式可能有细微差异
支持混合持久化(redis 4.0+):结合RDB和AOF优势配置复杂度高:需合理设置同步策略,重写触发条件等参数

5、AOF文件内容

客户端连接redis执行如下命令:

[root@xxx]# /xxx/redis-cli -h 127.0.0.1 -p 6379 -a xxx
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:16379> select 2 #使用2号库
OK
127.0.0.1:16379[2]> set XXX YYY #设置key=XXX,value=YYY
OK

AOF文件输出如下:

[root@xxx]# tail -f /xxx/appendonly.aof
*2 #表示这部分操作有2个部分
$6 #表示SELECT命令有6个字节
SELECT
$1 #表示使用的2号数据库这个2有1个字节
2
*3 #表示这部分操作有3个部分
$3 #表示set命令有3个字节
set
$3 #表示设置的键XXX有3个字节
XXX
$3
YYY #表示设置的值YYY有3个字节
http://www.xdnf.cn/news/579277.html

相关文章:

  • 8天Python从入门到精通【itheima】-26~28
  • CondaEnvException: The specified prefix appears to be a top level directory
  • 图论算法精解(Java 实现):从基础到高频面试题
  • 单链表C语言实现
  • Web项目流程总结
  • 第七章:数据存储策略与状态恢复机制实录
  • Bently Nevada 3500/61 非隔离I/O模块 (133819-02)
  • 一命通关单调栈
  • 工业轴承故障检测技术现状:中国智造的突破与挑战
  • 微信小程序自行diy选择器有效果图
  • 第20天-python生成word文档
  • 《MQTT 从 0 到 1:原理、实战与面试指南全解》
  • PostgreSQL相比Oracle有哪些优势?
  • 一朵由钢片织成的云 ——超“限”的结构
  • 精通Python:使用Pandas进行数据处理与分析
  • PortgreSQL常用操作
  • AI应用电商篇汇总(持续补充)
  • 让蜂鸣器报警并退出
  • 判断一个元素是否在可视区域
  • 嵌入式学习的第二十五天-系统编程-标准I0与文件IO
  • Agentic Loop与MCP:大模型能力扩展技术解析
  • 06 接口自动化-框架封装思想建立之httprunner框架(下)
  • 算法--js--电话号码的字母组合
  • Manus与DeepSeek 的区别
  • 从0开始学linux韦东山教程第四章问题小结(2)
  • Java异步编程利器:CompletableFuture 深度解析与实战
  • 【C++ Primer 学习札记】函数传参问题
  • 轻量级高性能Rust HTTP服务器库Hyperlane,助力现代网络服务开发
  • C++:vector容器
  • 心知天气 API 获取天气预报 2025/5/21