Redis_持久化(AOF、RDB)

news2024/11/24 4:24:49

6. Redis AOF

6.1 简介

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

6.2 AOF的配置

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

6.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. 不会阻塞当前的写操作

6.4 AOF 的潜在风险

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

6.5 AOF三种写回策略

打开redis.conf配置文件 appendfsync选项

  • always:同步写回:每个写指令执行完,立即同步将指令写入磁盘日志文件中
  • everysec:每秒写回:默认配置方式。每个写指令执行完,先把日志写到AOF文件的内存缓冲区。每隔一秒把缓冲区的内容写入磁盘
  • no:操作系统控制写回:每个写指令执行完,先把日志写到AOF文件的内存缓冲区,由操作系统决定何时把缓冲区的内容写入磁盘
选项写日志时机优点缺点
always同步写回数据可靠性高,基本不丢失对性能影响大
everysec每秒写回性能适中当服务器宕机时,丢失1秒内数据
no操作系统控制写回性能最高当服务器宕机时,丢失数据较多

6.6 AOF重写机制

6.6.1 简介

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

可以使用命令bgrewriteaof

重写主要是对多余的命令进行简化,修改,例如对list的lpushrpop进行简化

6.6.2 AOF重写的相关配置

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

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

6.6.3 AOF重写流程

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

7. Redis RDB

7.1 简介

RDB(Redis DataBase):内存快照,记录内存中某一时刻数据的状态。

RDB和AOF相比记录的数据,不是操作指令

redis提供了两个指令生成RDB文件

  • save:再主线程中执行,会阻塞主线程
  • bgsave:创建一个子线程,专门用来写RDB,避免主线程阻塞,默认配置

例如:有6GB的内存数据量,磁盘写入0.3GB/S,需要20S时间,来完成RDB文件写入,其中在这20中可能会有写入或修改数据

  • 处理技术:写时复刻技术(copy-on-write cow)。在执行快照处理的时候,依然正确执行写入操作(快照将修改数据创建副本,保存的时修改之前的数据
    在这里插入图片描述

7.2 快照频率

通过redis.conf配置文件去做处理

# save 3600 1
# save 300 100
# save 60 10000

7.3 混合使用AOF和RDB

通过redis.conf配置文件
打开aof

appendonly yes

打开混合配置

aof-use-rdb-preamble yes

在aof文件中,前半部分,就是rdb文件的内容,从rewirte之后,是aof文件内容
在这里插入图片描述

7.4关于对redis执久化处理的建议

  • 如果数据在服务器运行的时候,使用redis做缓冲,可以不使用任何持久化方式
  • 数据不能丢失,rdb和aof混合使用是一个好的选择
  • 如果数据不要求非常严格,要以允许分钟级别丢失,可以使用rdb
  • 如果只使用AOF,建议配置策略是everysec,在可靠性和性能之间做了一个折中
  • 如果磁盘允许,尽量避免AOF重写的频率,将默认值64M进行修改

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

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

相关文章

将本地项目上传至gitee的详细步骤

将本地项目上传至gitee的详细步骤 1.在gitee上创建以自己项目名称命名的空项目2.进入想上传的项目的文件夹,然后右键点击3. 初始化本地环境,把该项目变成可被git管理的仓库4.添加该项目下的所有文件5.使用如下命令将文件添加到仓库中去6.将本地代码库与远…

【Node.js】低代码平台源码

一、低代码简介 低代码管理系统是一种通过可视化界面和简化的开发工具,使非专业开发人员能够快速构建和管理应用程序的系统。它提供了一套预先定义的组件和模块,使用户可以通过拖放操作来设计应用程序的界面和逻辑。低代码管理系统还提供了自动化的工作…

IDEA每次启动indexing解决办法

每次启动indexing很浪费时间。 解决办法 setting中搜索index 设置如下: 这样设置以后,启动速度明显快多了。 参考 https://blog.csdn.net/qq_45162113/article/details/121128721

【云原生】Docker 详解(二):Docker 架构及工作原理

Docker 详解(二):Docker 架构及工作原理 Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互。…

【LangChain概念】了解语言链️:第2部分

一、说明 在LangChain的帮助下创建LLM应用程序可以帮助我们轻松地链接所有内容。LangChain 是一个创新的框架,它正在彻底改变我们开发由语言模型驱动的应用程序的方式。通过结合先进的原则,LangChain正在重新定义通过传统API可以实现的极限。 在上一篇博…

统计学和机器学习之间的联系和区别

一、说明 老实说,我厌倦了几乎每天都在社交媒体和我的大学里听到这场辩论。通常,这伴随着一些模糊的陈述来解释这个问题。双方都为此感到内疚。我希望在本文结束时,您将对这些有些模糊的术语有更明智的立场。 二、论点 与普遍的看法相反&…

SpringCloud源码探析(九)- Sentinel概念及使用

1.概述 在微服务的依赖调用中,若被调用方出现故障,出于自我保护的目的,调用方会主动停止调用,并根据业务需要进行对应处理,这种方式叫做熔断,是微服务的一种保护方式。为了保证服务的高可用性,…

银河麒麟高级操作系统V10助力联通云建设打出组合拳

联通云基于“双引擎基座一云多芯”为不同行业场景提供可靠、高质量的应用上云服务。在核心代码进行了全面把控,定制多架构芯片应用适配模版,开发了计算、存储、网络、中间件等组件,全面适配自主化服务器和操作系统,提供云服务器、…

ffmpeg+intel核显实现硬解码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前言二、检查方法1.图形法2.nvidia-smi3.intel-gpu-tools 三、安装使用1.libva-dev2.libva-utils3.编译安装4.测试1.vainfo2.ffmpeg测试解码 总结 前言 之…

微信个人小程序申请 (AppID 和 AppSecret)

1. 登录微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?url%2Fcgi-bin%2Fhome%3Ft%3Dhome%2Findex%26lang%3Dzh_CN%26token%3D47421820 2. 右上角立即注册 3. 注册类型选择小程序 4. 账号信息 5. 邮箱激活 6. 小程序发布流程 7. 小程序信息 (前往填写) 8. 获取小程…

【JavaScript】jquery的导入方式有两种:本地导入和线上导入

前言 jQuery是一个用来代替JavaScript来快捷书写前端脚本语言的库,jQuery可以大大的简化复杂的js代码,使开发人员专注于实现页面的效果。 导入方式有两种 jQuery的导入方式有两种,一种是本地导入,一种是利用超链接导入。 方法…

AES加密(1):AES基础知识和计算过程

从产品代码的安全角度考虑,我们需要对代码、数据进行加密。加密的算法有很多种,基于速度考虑,我们一般使用对称加密算法,其中有一种常见的对称加密算法:AES(Advanced Encryption Standard)。在一些高端的MCU&#xff0…

智慧工地源码 智慧工地云平台源码 智慧工地APP源码

智慧工地的核心是数字化,它通过传感器、监控设备、智能终端等技术手段,实现对工地各个环节的实时数据采集和传输,如环境温度、湿度、噪音等数据信息,将数据汇集到云端进行处理和分析,生成各种报表、图表和预警信息&…

了解IL汇编循环

IL代码, .assembly extern mscorlib {}.assembly Test{.ver 1:0:1:0}.module test.exe.method static void main() cil managed{.maxstack 8.entrypoint.locals init (int32, int32)ldc.i4 4stloc.0 //Upper limit of the Loop, total 5 ldc.i4 0 stloc.…

【12】Git工具 协同工作平台使用教程 Gitee使用指南 腾讯工蜂使用指南【Gitee】【腾讯工蜂】【Git】

tips:少量的git安装和使用教程,更多讲快速使用上手Gitee和工蜂平台 一、准备工作 1、下载git Git - Downloads (git-scm.com) 找到对应操作系统,对应版本,对应的位数 下载后根据需求自己安装,然后用git --version验…

NetFlow 笔记

目录 1. NetFlow 笔记1.1. 模拟器1.2. 什么是 NetFlow?1.3. Cisco NetFlow 版本1.4. NetFlow 是如何工作的?1.4.1. IP 流量1.4.2. NetFlow 缓存1.4.3. NetFlow 收集器 1.5. 为什么使用 NetFlow?1.6. SNMP 与 NetFlow1.7. sFlow、NetFlow、SNMP 三者之间有什么不同?1.7.1. s…

知网G4期刊《高考》简介及投稿要求

知网G4期刊《高考》简介及投稿要求 一、《高考》期刊简介: 主管单位:长春市委宣传部 主办单位:长春出版社 国内刊号22-1372/G4 国际刊号1673-6265 代号12-240 编辑单位:《高考》杂志社 出版周期:旬刊 类 …

【讯飞星火认知大模型】大模型之星火手机助理

目录 1. 讯飞星火认知大模型介绍 2. API 申请 3. 星火手机助理 4. 效果展示 1. 讯飞星火认知大模型介绍 讯飞星火认知大模型是科大讯飞自研的基于深度学习的自然语言处理模型,它可以理解和生成中文,执行多种任务,如问答、翻译、写作、编…

FFmpeg常见命令行(四):FFmpeg流媒体

前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。本文是音视频系…

MySQL_约束、多表关系

约束 概念:就是用来作用表中字段的规则,用于限制存储在表中的数据。 目的:保证数据库中数据的正确性,有效性和完整性。 约束演示 #定义一个学生表,表中要求如下: #sn 表示学生学号,要求使用 …