Redis-03 持久化(RDB, AOF,混合持久化)及原理

1,持久化

        Redis的持久化是必须的,当Redis服务宕机后,如果没有持久化,重启服务后redis中的数据都将丢失,所有的数据操作都将直连数据库,系统性能会大幅降低,所以在使用Redis做缓存服务时必须持久化Redis数据。Redis持久化有三种方式:RDB(默认,不推荐)、AOF(可用但不推荐)、混合持久化方式(推荐)。

        1.1,RDB(snapshot-快照模式)

        RDB的快照模式是指:达到redis服务设定的某个条件(如60s内有1000次数据增/删/该操作)或redis服务器内存使用率达到指定阈值时,将当前内存中所有redis数据写入名为dump.rdb的文件中,做为当前时刻数据快照。

        1.1.1,开启方式

        redis的RDB持久化方式不需要显试开启,默认就使用该持久化方式,如果想关闭RDB持久化方式,只需注释所有的save触发条件(见1.1.2的触发条件)即可。

        1.1.2,触发条件和文件存储位置

        触发条件的配置如下,达到任意一个即触发生成dump.rdb。可添加自定义条件。

save 900 1              // 900秒内至少有 1 次数据变化

save 300 10            // 300秒内至少有 10 次数据变化

save 60 10000        // 60秒内至少 10000 次数据变化

dbfilename dump.rdb      // 持久化文件名,可手动修改

dir /var/lib/redis               // 持久化数据文件存放位置,可修改

         1.1.3,生成快照方式及原理

        同步:等同于调用【save】命令。使用redis数据操作(存取)线程将当前时刻内存数据写入dump.rdb文件中,会阻塞数据操作;

        异步:等同于调用【bgsave】命令。创建一个子进程,将当前时刻内存数据写入dump.rdb文件,不影响父进程执行数据存取。如果已经有一个后台保存正在运行,或者有另一个非后台保存进程正在运行,特别是正在进行的 AOF 重写,则会返回错误。

        注意:在子进程生成快照的同时,父进程有增删改的操作数据,将会采用写时复制机制(Copy-On-Write, COW)保证这段时间的数据同步至RDB文件。原理是bgsave期间父进程的数据修改,将会被复制一份数据副本,bgsvae在写完rdb后再同步数据副本。

        1.1.4,RDB模式问题

        RDB的生成必须满足触发阈值,生产中不可能设置过于频繁的触发阈值,因为每次生成的RDB都是触发时刻内存中的所有数据。所以当未达到触发阈值时,如果redis服务宕机,则这段时间内的所有操作数据都将丢失。

1.2,AOF(append-only file)

        AOF是优于RDB的持久化方式,将redis数据变化的每一条指令记录到文件appendonly.aof中。实际并非直接写入aof文件,先写入服务器缓存,每隔一段时间调用fsync()将数据同步到磁盘文件。

        1.2.1,开启方式

        redis.conf中有AOF的开启参数,默认为no,开启直接改为yes即可。如果AOF和RDB同时打开,则两种文件(RDB、AOF)都会存在。

appendonly yes             

appendfilename "appendonly.aof"        // 生成的文件名,可手动修改名称

        1.2.2,触发条件 

        同RDB方式一样,AOF也有自己的触发条件

appendfsync no                   // 不主动发起同步,由操作系统决定何时同步。快,但不安全

appendfsync always            // 每个修改数据的命令都同步至AOF文件中。慢,但安全

appendfsync everysec        // 默认。每秒发起一次同步。若同步前redis宕机则丢失1秒数据

        1.2.3,AOF文件解析 

        RDB文件是数据二进制文件,打开时内容如同乱码,如图:

        AOF是将修改数据指令存入文件,如图:

 

        1.2.4,AOF优化策略:AOF重写

        通过上面的文件解析可知,AOF恢复数据的方式是依次执行AOF文件中的命令。但实际情况下,AOF中有很多冗余的命令,如下方场景:

        为某篇文章累加阅读量。假如阅读量累加到5时,redis宕机,此时恢复数据不需依次累加,实则只需执行 set readcount-article1 5即可。基于类似数据场景,AOF提供了内置的优化机制:

AOF重写:达到重写的触发条件后,redis将根据当前内存数据,重新生成AOF文件。

触发条件配置:

auto-aof-rewrite-percentage 100          // aof文件自上次重写后,文件大小增长100%则触发再次重写

auto-aof-rewrite-min-size 64mb           // aof文件达到64M时重写

        使用命令【BGREWRITEAOF】手动触发一次重写,查看上述累加重写前后文件内容:

         注意:重写时,AOF模式采用类似RDB的【bgsave】方式,新建一个子进程重写AOF文件,故重写是不会影响主进程的redis数据操作。

        1.2.4,AOF模式问题

        如果redis运行时间很长,AOF文件将会巨大无比,即便使用了AOF重写,恢复数据时仍旧可能会非常缓慢。

        1.3,混合持久化方式

        RDB持久化方式,数据文件小(二进制数据),恢复数据快,缺点是容易丢失数据。AOF持久化方式,虽然安全但数据文件较大,恢复数据慢。混合持久化整合了两种方式的优点,混合持久化的AOF数据文件由两部分组成:[RDB file] 和 [AOF tail]。

        具体原理:当数据量未达到AOF重写阈值时,数据已redis命令方式写入AOF文件,当触发AOF重写时,当前时刻的数据将以RDB数据格式写入新的aof文件(RDB file),重写过程中的redis数据操作仍旧已命令方式追加写入该文件(AOF tail)。当重写完成后,新AOF文件替换旧的AOF文件。混合持久化文件内容如下:

         1.3.1,开启方式

        redis.conf中有混合持久化的开启参数,默认为no,开启混合持久化方式,需先开启AOF方式,再将下述参数改为yes即可。

aof-use-rdb-preamble yes        

        开启后,重写AOF,重写前的AOF参考1.2.3,重写后AOF如下,

        1.3.2,触发条件

        使用AOF方式的触发机制。tip:当使用混合持久化方式时,可关闭RDB持久化方式。

2,数据恢复

        恢复redis数据非常容易,只需将对应的数据文件放入redis.conf中配置的数据文件目录里即可。如上述案例中,数据文件的存储位置为:

        只需将待恢复数据的文件:dump.rdb或appendonly.aof文件放入该目录,重启reids时会自动恢复文件中数据。

         注意:虽然本章实现了数据的持久化,但当Redis宕机,如果数据操作量巨大,相当于出现【缓存穿透】现象,将极大降低系统性能。故生产中使用Redis一般都会使用主从架构,将在下章讲解。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW离心泵振动监控与诊断系统

利用LabVIEW结合数据采集与处理技术,构建了一套高效、低成本的振动监测与诊断系统,有效提升了测试精度与设备可靠性。 项目背景 在化工生产中,离心泵作为关键设备,其稳定运行对保障生产安全与效率至关重要。由于传统振动测试系统…

#数据结构(一)

线性表 两者都属于线性表线性表:逻辑结构------必连续      物理结构------不一定连续顺序表的物理结构 -----连续 ,链表的物理结构 ----不连续顺序表的本质是数组,数组是一块地址连续的空间。而链表只是像细线一样,将不同地址…

LabVIEW提高开发效率技巧----VI继承与重载

在LabVIEW开发中,继承和重载是面向对象编程(OOP)中的重要概念。通过合理运用继承与重载,不仅能提高代码的复用性和灵活性,还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载,并…

萤石云服务支持云端视频AI自动剪辑生成

萤石视频云存储及媒体处理服务是围绕IoT设备云端存储场景下的音视频采集、媒体管理、视频剪辑和分发能力的一站式、专业云服务,并可面向广大开发者提供复杂设备存储场景下的完整技术方案。目前该服务新增了视频剪辑功能,支持将视频片段在云端进行裁剪并拼…

sentinel dashboard分布式改造落地设计实现解释(二)-分布式discovery组件

discovery discovery负责维护app/机器资料库,transport健康检测, transport上下线处理。discovery关键是分布式存储,后续研究一下raft,其复制,状态机,快照技术,但个人觉得,discover…

胤娲科技:AI短视频——创意无界,即梦启航

在这个快节奏的时代,你是否曾梦想过用几秒钟的短视频,捕捉生活中的每一个精彩瞬间?是否曾幻想过,即使没有专业的摄影和剪辑技能,也能创作出令人惊艳的作品? 现在,这一切都不再是遥不可及的梦想。…

基于光度学的小型视触觉传感器的开发

近年来,视觉触觉传感器(VTS)在机器人领域得到了广泛关注。传统的触觉传感器如压阻式、压电式和电容式触觉传感器在机器人感知方面有显著优势,但其分辨率相对较低。视触觉传感器使用相机获取触觉信息,能够提供高分辨率和…

执行jar文件no main manifest attribute错误

执行jar文件no main manifest attribute错误 问题是由于maven打包时候没有指定主启动程序,或下方配置中多余true配置跳过主程序配置 对应找到build中的所有有关true的删除,再重新打包即可

open-cd中的changerformer网络结构分析

open-cd 目录 open-cd1.安装2.源码结构分析主干网络1.1 主干网络类2.neck2.Decoder3.测试模型6. changer主干网络 总结 该开源库基于: mmcv mmseg mmdet mmengine 1.安装 在安装过程中遇到的问题: 1.pytorch版本问题,open-cd采用的mmcv版本比…

Axure重要元件一——动态面板

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 本节课:动态面板 课程内容:认识动态面板、动态面板基本操作 应用场景:特定窗口、重要交互、长页面、容器等 一、认识动态面板 动态…

flutter TabBar自定义指示器(带文字的指示器、上弦弧形指示器、条形背景指示器、渐变色的指示器)

带文字的TabBar指示器 1.绘制自定义TabBar的绿色带白色文字的指示器 2.将底部灰色文字与TabrBar层叠,并调整高度位置与胶囊指示器重叠 自定义的带文字的TabBar指示器 import package:atui/jade/utils/JadeColors.dart; import package:flutter/material.dart; im…

用户界面设计:视觉美学与交互逻辑的融合

1、什么是用户界面 用户界面(UI)是人与机器之间沟通的桥梁,同时也是用户体验(UX)的重要组成部分。用户界面设计包括两个核心要素:视觉设计(即产品的外观和感觉)和交互设计&#xff…

【JavaEE初阶】深入理解TCP协议中的封装分用以及UDP和TCP在网络编程的区别

前言 🌟🌟本期讲解关于TCP/UDP协议的原理理解~~~ 🌈上期博客在这里:【JavaEE初阶】入门视角-网络原理的基础理论的了解-CSDN博客 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 …

Android Framework AMS(09)service组件分析-3(bindService和unbindService关键流程分析)

该系列文章总纲链接:专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明: 说明:上上一章节主要解读应用层service组件启动的2种方式startService和bindService,以及从APP层到AMS调用之间的打通。上一章节我们关注了s…

K-means 算法、层次聚类、密度聚类对鸢尾花(Iris)数据进行聚类

目录 1.基础知识 1.1 K-Means 算法 1.2 层次聚类(Hierarchical Clustering) 1.3 密度聚类(DBSCAN) 1.4 距离和相似度度量方法 1.5 总结: 2.K-means 算法对鸢尾花(Iris)数据进行聚类 2.1…

【动手学电机驱动】TI InstaSPIN-FOC(5)Lab04 电机力矩闭环控制

TI InstaSPIN-FOC(1)电机驱动和控制测试平台 TI InstaSPIN-FOC(2)Lab01 闪灯实验 TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量 TI InstaSPIN-FOC(4)Lab02b 电机参数辨识 TI Insta…

智慧供排水管网在线监测为城市安全保驾护航

一、方案背景 随着城市化进程的不断推进,城市供排水管网作为城市基础设施的关键组成部分,其安全稳定的运行对于确保城市居民的日常生活、工业生产活动以及整个生态环境的健康具有至关重要的作用。近年来,由于各种原因,城市供排水管…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 (1)、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表,分布在不同的数据库节点上。例如,可以根据某个字段的值进行哈希取模,将数据均匀的分布到不同的节点上。 这样做的好处…

安卓开发中轮播图和其指示器的设置

在安卓开发中,轮播图(Carousel)是一种常见的UI组件,用于展示一系列图片或内容,用户可以左右滑动来切换不同的视图。轮播图通常用于展示广告、新闻、产品图片等。 轮播图的指示器(Indicator)则是…

k3s安装指定版本以及离线安装(docker)

首先下载你所需要版本的k3s安装包,目录结构如下所示,我这里是v1.19.15k3s2。 1.首先赋予可执行权限后进行安装。 # k3s 需要赋予可执行权限 sudo chmod x k3s sudo chmod x k3s-install.sh2.然后将k3s的二进制文件复制到/usr/local/bin/ cp k3s /us…