深入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.hqwc.cn/news/265797.html

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

相关文章

函数的栈帧

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

SpringBoot中MyBatis-Flex的集成和使用

一、MyBatis-Flex 是什么​ MyBatis-Flex是一个基于MyBatis的数据访问框架,专门为Flex应用程序而设计的。它提供了一种灵活而高效的方式来处理Flex应用程序中的数据访问,可以轻松地连接到各种数据源,并提供了一些方便的工具和功能&#xff0c…

联邦蒸馏中的分布式知识一致性 | TIST 2024

联邦蒸馏中的分布式知识一致性 | TIST 2024 联邦学习是一种隐私保护的分布式机器学习范式,服务器可以在不汇集客户端私有数据的前提下联合训练机器学习模型。通信约束和系统异构是联邦学习面临的两大严峻挑战。为同时解决上述两个问题,联邦蒸馏技术被提…

Global IIIumination(GI)全局光照原理(一)3D空间全局光照

文章目录 一、Global IIIumination(GI)全局光照基本概念二、主流的全局光照方法:三、Reflective shadow maps(RSM)反射阴影贴图 全局光照四、Light Propagation Volumes (LPV)光线传播体积 全局光照1.第一步&#xff0…

2、快速搞定Kafka术语

快速搞定Kafka术语 Kafka 服务端3层消息架构 Kafka 客户端Broker 如何持久化数据小结 Kafka 服务端 3层消息架构 第 1 层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。第 2 层是分区层,每个分区的 N 个副本中只能有…

说一些你不知道的知识——接口测试的测试要点

接口测试的测试要点,你知道都有哪些吗? 接口测试是软件测试中的重要组成部分,它的目的是评估接口的质量和可靠性,以保证系统的正常运行。在进行接口测试时,必须要考虑到以下几个方面: 测试用例的编写 测试…

【Linux】进程通信之命名管道mkfifo

1.认识命名管道 匿名管道应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件 2.在命…

智能工厂的信息化建设

为大家介绍一个通过数字孪生技术建设智能工厂信息化建设的案例,看看我们是如何通过易知微EasyV数字孪生可视化大屏来为企业进行数字化转型。 易知微-EasyV数字孪生|智慧城市园区工厂水利双碳|三维地图数据可视化大屏​easyv.cloud/​编辑https://link.zhihu.com/?…

LAMP 搭建

目录 LAMP LAMP组成及作用 LAMP搭建实验举例,优先将防火墙和安全终端关闭,在一台虚拟机上操作 搭建 apache httpd服务 搭建 mysql服务 搭建 php服务 安装论坛 LAMP —— LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一…

2013年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2013 级考研管理类联考数学真题一、问题求解(本大题共 15 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2013-01&…

排序与算法--冒泡排序

1.原理 比较两个相邻的元素,将较大的值交换到右边 2.举例:2 8 7 5 9 4 3 第一趟: 第一次:比较第一个和第二个:2 8 ,不需要交换 第二次:比较 8 7,将8和7进行交换:2 7 …

电脑出现错误0x80004005怎么解决,解决0x80004005的问题

当电脑出现0x80004005错误时,通常是由于系统或应用程序之间的通信问题或文件系统损坏引起的。该错误代码表示未指定错误,在Windows系统中较为常见。 一.解决0x80004005错误的步骤 重新启动电脑 有时候,错误只是一个暂时的问题,重…