Redis AOF

news2024/11/23 21:23:02

一、Redis AOF

1.简介

目前, redis 的持久化主要应用 AOF(Append Only File) RDB 两大机制。 AOF 以日志的形式来记录每个写操作( 增量保存 ), redis 执行过的所有写指令全部记录下来 ( 读操作不记录 ) 。只许追加文件,但不可以改写文件。redis 启动之初会读取该文件,进行重新构建数据。

2.AOF的配置

  • AOF默认不开启,conf配置文件中进行配置。
  • 修改redis.conf配置文件
appendonly no
//修改
appendonly yes
  • 默认文件名是appendonly.aof
  • 默认是启动后的相对路径,redis在哪里启动,appendonly.aof文件就在哪生成

3.AOF日志是如何实现

  • 数据库写前日志(Write Ahead Log ,WAL),在实际写数据库前,先把修改的数据记录到日志文件中,以便发生故障时,时行恢复。
  • AOF日志是写后日志。redis先去执行命令,把数据写入内存中,然后才去记录日志。

  • 查看AOF文件
    • set k1 v1
    • vi appendonly.aof
*3 //接下来的指令由3部分组成
$3 //指令有3个字节
set
$2 //指令有2个字节
k1
$2 //指令有2个字节
v1
  • 为什么使用写后日志?
    • 1.redis为了避免检查开销,向AOF中记录日志,是不做检查的。如果写前执行,很有可能将错误指令记录到日志中,在使用redis恢复日志时,就可能会出现错误
    • 2.不会阻塞当前的写操作

4.AOF潜在风险

  • 1.aof文件可能由于异常原因被损坏。可以使用redis自带的命令redis-check-aof --fix appendonly.aof文件,修复成功,可以正确启动
  • 2.由于刚刚执行一个指令,还没有写入日志,就宕机了。就会导致数据永久丢失(redis做为数据库存储的情况)
  • 3.AOF避免了对当前指令的阻塞,但可能会由于磁盘写入压力较大,对下一个操作带来阻塞风险

5. AOF三种写回策略

  • 打开redis.conf配置文件 appendfsync选项
  • always:同步写回:每个写指令执行完,立即同步将指令写入磁盘日志文件中
  • everysec:每秒写回:默认配置方式。每个写指令执行完,先把日志写到AOF文件的内存缓冲区。每隔一秒把缓冲区的内容写入磁盘
  • no:操作系统控制写回:每个写指令执行完,先把日志写到AOF文件的内存缓冲区,由操作系统决定何时把缓冲区的内容写入磁盘

6.AOF重写机制

6.1 简介

  • Redis根据数据库现有数据,创建一个新的AOF文件,读取数据库中所有键值对,重新对应一条命令写入。
  • 可以使用命令bgrewriteaof

6.2 AOF重写的相关配置

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • 如果aof文件超过64m,且比上次重写后的大小增加了100%,自动触发重写。
  • 例如 文件80m,开如重写,重写后降到50m,下一次,达到100m再开始重写

6.3 AOF重写流程

  • bgrewirteaof触发重写,判断是否当前有重写在运行,如果有,则等待重写结束后再执行
  • 主进程fork出一个子进程,执行重写操作,保证主进程不阻塞,可以继续执行命令
  • 子进程循环遍历reids内存中的所有数据到临时文件,客户端的写请求同时写入aof缓冲区和aof重写缓冲区。保证原AOF文件完整以及新的AOF文件生成期间的新的数据修改操作不会丢失
  • 子进程写完新AOF文件以后,向主进程发送信号,主进程更新统计信息
  • 主进程把aof重写缓冲区中的数据写入到新的AOF文件
  • 用新AOF文件覆盖掉旧的AOF文件,完成AOF重写

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试学习(七)-正则表达式,你真的会用吗?

目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式(regex),就是一种模式匹配,学会用正则匹配,就可以达到事半功倍的效果。 一、正则表达式在…

工程管理系统软件 自主研发,工程行业适用

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…

在 Web3 里如何寻找靠谱的创新路径——Solv V3 阶段性复盘(上)

作者:Solv 核心团队Solv V3 是 3 月 21 日发布的,到这周一整整三个星期。三周时间产生的实际交易额超过 6,000 万美元,预计在本月内能够破亿。而且从我们手上的 pipeline 来看,这个增长的势头还将持续下去。在几个月内&#xff0c…

「Long HK, Long Crypto」主题酒会在香港圆满举行!Web3er齐聚一堂共叙行业发展

「2023 香港 Web3 嘉年华」是香港有史以来规模最大的加密货币活动之一,邀请了300多位行业领袖、区块链项目创始人、投资人、监管机构代表、专家学者,为每一位参与者带来前沿的 Web3 技术,共同探讨 Web3 未来发展的关键问题。 Web3相关的各大…

OpenCV实战(19)——特征描述符

OpenCV实战(19)——特征描述符0. 前言1. 特征描述符2. 提升匹配集质量2.1 交叉检查匹配2.2 比率测试2.3 距离阈值3. 完整代码小结系列链接0. 前言 SURF 和 SIFT 关键点检测算法为每个检测到的特征计算位置、方向和比例,比例因子信息可用于定…

RestClient查询文档

文章目录1、RestClient查询文档----快速入门2、查询文档--match、term、range、bool3、查询文档-排序和分页4、高亮1、RestClient查询文档----快速入门 基本步骤 1.先创建SearchRequest对象,调用source方法(DSL)——>相当于红框内的大jso…

最前端|什么是低代码?与传统开发的区别是什么?

目录一、低代码介绍二、背景趋势三、低代码与传统代码开发(一)低代码能否替代传统开发低代码页面传统开发页面(二)相同业务不同方式对比1.低代码开发(1)优点(2)缺点2.传统代码开发&a…

实现一个登录功能方案设计2

需求MySQL表实现方案index页面home页面需求 实现一个登录功能 实现的功能 注册(邮箱注册)登录(邮箱密码)重置密码查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)登出在第一版的基础上进行优化:\ 优化点: 存操作信息请求的post使用中间件进行储存操作信息.避免重复代码 因…

【面试】如何设计SaaS产品的数据权限?

文章目录前言数据权限是什么?设计原则整体方案RBAC模型怎么控制数据权限?1. 数据范围权限控制2. 业务对象操作权限控制3. 业务对象字段权限控制总结前言 一套系统的权限可以分为两类,数据权限和功能权限,今天我们从以下几个点&am…

阿里云服务器安装宝塔面板搭建网站全流程(一步步详解)

阿里云服务器安装宝塔面板教程,云服务器吧以阿里云Linux系统云服务器安装宝塔Linux面板为例,先配置云服务器安全组开放宝塔所需端口8888、888、80、443、20和21端口,然后执行安装宝塔面板命令脚本,最后登录宝塔后台安装LNMP&#…

UML 简易使用教程

最近刚好有空,遂决定对应 UML 常用的一些图进行整理,供自己以及需要的人查阅。 UML 分为静态模型与动态模型。静态模型描述一个系统的静态特征,固定的框架结构。包括用例图、类图、对象图、组件图、部署图;动态模型包括时序图、协…

TensorFlow 智能移动项目:11~12

原文:Intelligent mobile projects with TensorFlow 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只…

Flutter 第一个界面

第一个页面 app首页 入口函数 一个Flutter工程的入口函数与Dart命令行工程一样是main,不同的是在Flutter中执行runApp(ArticleApp()) 就能够在手机屏幕上展示这个Widget。 import package:flutter/material.dart; void main() > runApp(new ArticleApp()); Ar…

OpenAI不能访问有什么方法解救呢?试试这方法吧

最近发现国内不挂代理是不能访问到openAI的接口的,为了解决这个问题,我一直在github上需在解决方案,今天终于被我找到一个大神开源了一个解决方案。下面就来看看如何做吧。 整个项目的代码很简单只有几行代码: {"rewrites&q…

几种在Python中List添加、删除元素的方法

嗨害大家好鸭!我是爱摸鱼的芝士❤ 一、python中List添加元素的几种方法 List 是 Python 中常用的数据类型, 它一个有序集合, 即其中的元素始终保持着初始时的定义的顺序 (除非你对它们进行排序或其他修改操作)。 …

进程互斥的实现方式

1.进程互斥的软件实现方法 1.单标志法 算法思想:两个进程在访问完临界区后会把使用临界区的权限转让给另一个进程,也就是说每个进程进入临界区的权限只能被另一个进程赋予 局限性 2.双标志先检查法 算法思想:设置一个布尔数组flag[]&#xff…

python 笔记:PyTrack(将GPS数据和OpenStreetMap数据进行整合)【官网例子解读】

论文笔记:PyTrack: A Map-Matching-Based Python Toolbox for Vehicle Trajectory Reconstruction_UQI-LIUWJ的博客-CSDN博客4 0 包的安装 官网的两种方式我都试过,装是能装成功,但是python import PyTrack包的时候还是显示找不到Pytrack …

Altova MapForce 2023 Crack

Altova MapForce 2023 Crack 数据映射项目中的注释-除了支持对数据映射项目的单个连接进行注释外,现在还可以向源组件和目标组件添加注释,以帮助记录映射的作用和实现方式。 支持XML输出中的standalone“yes”声明-在独立文档声明中,值“yes”…

Chat-GLM 详细部署(GPU显存>=12GB)

建议配置: ( Windows OS 11 部署 )CPU-i7 13700F ~ 13700KF RAM: 16GB DDR4 GPU: RTX3080(12G) 安装 conda: 1. 下载安装 miniconda3 : https://docs.conda.io/en/latest/miniconda.html conda是一个包和环境管理工具,它不仅能管理包,还能隔…

Linux嵌入式学习之Ubuntu入门(四)Makefile

系列文章目录 一、Linux嵌入式学习之Ubuntu入门(一)基本命令、软件安装及文件结构 二、Linux嵌入式学习之Ubuntu入门(二)磁盘文件介绍及分区、格式化等 三、Linux嵌入式学习之Ubuntu入门(三)用户、用户组…