深入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…

HTB Surveillance

Surveillance 2023年12月10日 12:13:35User nmap Starting Nmap 7.80 ( https://nmap.org ) at 2023-12-10 12:15 CST Stats: 0:00:37 elapsed; 0 hosts completed (1 up), 1 undergoing Connect Scan Connect Scan Timing: About 59.83% done

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

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

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

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

八叉树bt文件转为grid文件的代码及编译流程

目的 点云文件转为八叉树文件 代码 在一个文件夹中新建两个文件&#xff0c;pcd2bt.cpp和CMakeLists.txt&#xff0c;分别写入&#xff1a; grid3d_node.cpp #include <ros/ros.h> #include <string> #include "grid3d.hpp"int main(int argc, char…

【Maven技术专题】「实战开发系列」盘点Maven项目中打包需要注意到的那点事儿

Maven项目打包需要注意到的那点事儿 Maven是什么Maven打包插件的作用Maven打包后经常出现的问题maven构建可运行Jar包 Maven打包的三种方式Maven打包的最简单的方法maven-jar-pluginMANIFEST.MF文件部分MANIFEST.MF的文件内容jar包的拷贝机制在pom.xml中配置 maven-jar-plugin的…

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 …

C++大型项目经验

1 附加包含目录 在Visual Studio中&#xff0c;“附加包含目录”&#xff08;Additional Include Directories&#xff09;是一个编译器设置&#xff0c;它指示编译器在查找包含文件&#xff08;通常是头文件&#xff0c;扩展名为.h或.hpp&#xff09;时去哪些额外的文件夹路径…

函数的栈帧

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

Error opening file for writing报错解决

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

CSS结构伪类选择器之否定伪类:not()

结构伪类选择器是针对 HTML 层级结构的伪类选择器。 常用的结构化伪类选择器有&#xff1a; :root选择器、:not选择器、:only-child选择器、:first-child选择器、:last-child选择器、 :nth-child选择器、:nth-child(n)选择器、:nth-last-child(n)选择器、:nth-of-type(n)选择…

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

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

Userwindows pc电脑生成一个电脑唯一机器码

在Windows PC上生成一个唯一标识码通常涉及到计算机硬件和软件的信息。有一些常见的方式可以获取到一个较为唯一的标识码&#xff1a; 1. 硬件信息&#xff1a; 可以通过获取计算机的硬件信息来生成一个唯一标识码。这可能包括CPU序列号、硬盘序列号、网卡MAC地址等。但请注意…

ffmpeg过滤器filter理论与实战

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

Vue项目中WebSocket封装

WEBSOCKET 封装引入初始化使用 封装 utils下建立WebSocketManager.js class WebSocketManager {constructor() {this.url null;this.websocket null;this.isConnected false;this.listeners {onopen: [],onmessage: [],onclose: [],onerror: [],};this.reconnectionOptio…

QML如何与C++层进行信号槽通讯

//QML端为槽函数 //其中serial为C类的对象 //CSerial serial(暂且可以这么理解) QML&#xff1a; Connections{ target: serial onStringReceived:{ console.log("receive:"receiveString) } } //C端为信号 //C //C类…

kafka 常用命令【学习笔记】

Kafka 环境变量配置 export KAFKA_HOME/opt/cloudera/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554/lib/kafka export PATH P A T H : PATH: PATH:KAFKA_HOME/bin 查看主题 ./kafka-topics.sh --list --zookeeper localhost:2181 创建主题 ./kafka-topics.sh --create --zook…

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

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

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…