深入Redis过程-持久化

目录

redis实现持久化

RDB

触发机制-定期方法

定期-手动触发

save

bgsave

定期-自动触发

AOF

开启AOF功能

刷新缓冲区策略

重写机制

混合持久化

Redis事务

事务相关的命令

MULTI

EXEC

DISCARD

WATCH


redis实现持久化

RDB

RDB叫做Redis数据备份文件,也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录

触发机制-定期方法

定期-手动触发

通过redis客户端,执行特定的命令,来触发快照生成

save

执行save的时候,redis就会全力以赴的执行“快照生成”操作,此时就会阻塞redis的其他客户端的命令(一般不建议使用save)

bgsave

运作流程:

1.执行bgsave命令, Redis 父进程判断当前进是否存在其他正在执行的子进程,如RDB/AOF子进星,如果存在bgsave命令直接返回。
2.父进程执行fork创建子进程,fork 过程中父进程会阻塞,通过info stats命令查看latest_fork_usec 选项,可以获取最近一次fork操作的耗时,单位为微秒。
3.父进程fork完成后,bgsave命令返回"Background saving started"信息并不再阻塞父进程,可以继续响应其他命令。
4.子进程创建RDB文件,根据父进程内存生成临时快照文件。完成后对原有文件进行原子替换。执行lastsave命令可以获取最后-次生成RDB的时间,对应info统计的rdb_ last_save_time选项。
5.进程发送信号给父进程表示完成,父进程更新统计信息。

定期-自动触发

在redis配置文件中,设置一下,让redis,每隔多长时间/没产生多少次修改就触发

RDB问题:不能实时的持久化保存数据,在两次生成快照之间,实时的数据可能会随着重启而丢失

AOF

类似于mysql的binblog,就会把用户的每个操作,都记录到文件中。当redis重新启动的时候,就会读取这个aof文件中的内容,用来恢复数据。

开启AOF功能

默认此功能是关闭的,修改配置文件来开启aof功能

刷新缓冲区策略

1、AOF 机制并非是直接让工作线程把数据写入硬盘,而是先写入一个内存中的缓冲区,积累到一定数量的时候,再统一写入硬盘;

2、AOF 每次是把新的操作命令顺序写入原有文件的末尾,输入顺序写入,这样的方式相比于随机访问的速度要快很多的

redis 给出了一些选项,让我们可以根据实际情况来决定怎么取舍——缓冲区刷新策略:

1、always 每操作一次就保存一次:频率是最高的,数据可靠性最高,性能最低.

2、everysec 每秒保存一次:频率低一些,数据可靠性降低,性能会提高.

3、 no 跟随系统的同步策略:频率最低,数据可靠性最低,性能是最高的.

重写机制

此机制能够针对aof文件进行整理操作,这个整理就是能够剔除其中的冗余操作,并且合并一些操作,达到给aof文件瘦身的效果

Redis也会在触发阈值时自动去重写AO文件,阈值也可以在redis.conf中配置:

流程

混合持久化

结合了rdb和aof的特点,按照aof的方式,每一个请求/操作,都记录入文件,在触发aof重写后,就会把当前内存的状态按照rdb的二进制格式写入到新的aof文件中,后续再进行的操作,仍然是按照aof文本的方式追加到文件后面

Redis事务

本质上是在服务器上搞了一个“事务队列”,每次客户端在事务中进行了一个操作,都会把命令先发给服务器,放到“事务队列”中(但是并不会立即执行),而是会在真正收到EXEC命令之后,才真正执行队列中的所有操作

redis事务和mysql事务的区别:

弱化的原子性:redis没有“回滚机制”,只能做到这些操作“批量执行”,不能做到“一个失败就恢复到初始状态”;

不保证一致性:不涉及“约束”,也没有回滚。MySQL的一致性体现的是运行事务前和运行后,结果都是合理有效的,不会出现中间非法状态;

不需要隔离性:也没有隔离级别,因为不会并发执行事务(redis单线程处理请求);

不需要持久性:是保存在内存的,是否开启持久化,是redis-server自己的事情,和事务无关

事务相关的命令

MULTI

开启事务

EXEC

执行事务

DISCARD

放弃当前事务

WATCH

监控某个key是否在事务执行之前,发生了改变

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

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

相关文章

强大的公式编辑器 —— MathType最新版本安装与使用

强大的公式编辑器 —— MathType最新版本安装与使用 由于使用了很长时间的机械硬盘出现坏道,安装在其中的MathType6.9(精简版)也没办法使用了,本来想安装个高版本的MathType,比如MathType7.4,但在网上苦苦…

如何更改Jupyter Notebook中的环境?

1.首先,打开终端 2.接着,分别输入以下命令 conda env list 把EXPose替换为自己的环境变量 conda activate EXPose 3.接下来安装‘ ipykernel ’软件包 conda install ipykernel 4. 将该环境添加到Jupyter Notebook中;在Jupyter Notebook…

小白第一次开私服怎么吸引玩家

大家好,我是咕噜-凯撒,在现在这个网络社会很多人为了放松一下会选择打打游戏,私服也就成为了许多玩家为了寻找新鲜体验的热门选择,很多小白就发现了这个契机但是吸引玩家加入自己的服务器也就成了一个比较头疼的问题,下…

Wrong number of values of control parameter 2(Halcon 错误代码:1402)

threshold (ImageReduced1, Region, 0,min2(75,Min)) 程序运行到这一句,出现错误 原因是其中的参数Min为空数组 解决方案:判断了下可以输出Min的区域是否存在,不存在跳过这一步。

mybatis多表映射-分步查询

1、建库建表 create database mybatis-example; use mybatis-example; create table t_book (bid varchar(20) primary key,bname varchar(20),stuid varchar(20) ); insert into t_book values(b001,Java,s001); insert into t_book values(b002,Python,s002); insert into …

函数的栈帧

我们每次在调用函数的时候,都说会进行传参。每次创建函数,或者进行递归的时候,也会说会进行压栈。 那么,今天我们就来具体看看函数到底是如何进行压栈,传参的操作。 什么是栈? 首先我们要知道,…

Error opening file for writing报错解决

报错展示及描述 在安装pycharm的时候出现了一下报错, Error opening file for writing。 报错原因 一般出现这种报错都是文件权限的原因,检查一下,果然这个文件夹权限是【只读】 查看文件权限的方式:【右击】文件夹名称&#xff0…

046:vue通过axios调用json地址数据的方法

第046个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

ffmpeg过滤器filter理论与实战

文章目录 前言一、DirectShow1、简介2、程序基本结构3、架构 二、过滤器1、视频过滤器 -vf2、音频过滤器 -af3、过滤器链(Filterchain)4、过滤器图(Filtergraph)①、基本语法②、Filtergraph 的分类 5、结构体间的关系图 三、过滤…

保研毕业论文查重率多少通过【保姆教程】

大家好,今天来聊聊保研毕业论文查重率多少通过,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 保研毕业论文查重率多少通过 在保研过程中,毕业论文的查重率是衡量学术诚信和论文…

JAVA8新特性之函数式编程详解

JAVA8新特性之函数式编程详解 前言一、初步了解函数式接口二、 Lambda表达式2.1 概述2.2 lambda省略规则2.3 lambda省略常见实例2.4 lambda表达式与函数式接口 三、 Stream流3.1 stream流的定义3.2 Stream流的特点3.3 Stream流的三个步骤3.4 Stream 和 Collection 集合的区别&a…

【HarmonyOS开发】拖拽动画的实现

动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS(F…

【带头学C++】----- 九、类和对象 ---- 9.12 C++之友元函数(9.12.1---12.4)

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️创做不易,麻烦点个关注❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ ❤️❤️❤️❤️❤️❤️❤️❤️❤️文末有惊喜!献舞一支!❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目录 9.12…

五:爬虫-数据解析之xpath解析

三:数据解析之xpath解析 1.xpath介绍: ​ xpath是XML路径语言,它可以用来确定xml文档中的元素位置,通过元素路径来完成对元素的查找,HTML就是XML的一种实现方式,所以xpath是一种非常强大的定位方式​ XPa…

vue2 element-ui select下拉框 选择传递多个参数

<el-select v-model"select" slot"prepend" placeholder"请选择" change"searchPostFn($event,123)"> <el-option :label"item.ziDianShuJu" :value"{value:item.id, label:item.ziDianShuJu}" v-for&qu…

Ubuntu系统使用快速入门实践(七)——软件安装与使用(5)

Ubuntu系统使用快速入门实践系列文章 下面是Ubuntu系统使用系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 Ubuntu系统使用快速入门实践系列文章总链接 下面是专栏地址&#xff1a; Ubuntu系统使用快速入门实践系列文章专栏 文章目录 Ubuntu系统使用快速…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-构建可同步场景

【背景】 最近在研究远程画面&#xff0c;所以就实践了一下。技术采用我认为比较合适的WebRTC。 这篇文章的基础是我的另一篇博文&#xff0c;如果希望顺利完成本篇操作&#xff0c;请先关注我后查询我的如下博文&#xff1a; 【WebRTC】【Unity】Unity Web RTC1-Unity中简单实…

Docker架构及常用的命令

一、初识Docker 1、 docker是一个快速交付应用、运行应用的技术&#xff0c;具备下列优势&#xff1a; 可以将程序及其依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统运行时利用沙箱机制形成隔离容器&#xff0c;各个应用互不干扰启动、移除都可以…

边缘智能网关如何应对环境污染难题

随着我国工业化、城镇化的深入推进&#xff0c;包括大气污染在内的环境污染防治压力继续加大。为应对环境污染防治难题&#xff0c;佰马综合边缘计算、物联网、智能感知等技术&#xff0c;基于边缘智能网关打造环境污染实时监测、预警及智能干预方案&#xff0c;可应用于大气保…

银行数据分析入门篇:信用卡全生命周期分析,到底应该怎么做?

最近有朋友向我咨询银行信贷业务的数据分析&#xff0c;就看了很多案例&#xff0c;刚好看到一个信用卡全生命周期分析的案例&#xff0c;做得很详细又通俗易懂&#xff0c;基本上可以直接复制套用&#xff0c;所以特地分享给大家。 本文主要分享作者整个分析作品的思路&#x…