Redis(事务和持久化)(很重要!)

事务的定义:

Redis中的事务是指一组命令的集合,这些命令可以在一个原子操作中执行。在Redis中,可以使用MULTI命令开始一个事务,然后使用EXEC命令来执行事务中的所有命令,或者使用DISCARD命令来取消事务。事务可以确保在执行期间不会被其他客户端的命令中断,并且可以保证事务中的所有命令要么全部执行成功,要么全部失败。事务在Redis中通常用于执行一系列相关的命令,以确保这些命令要么全部成功,要么全部失败。

Redis中的事务主要是通过MULTIEXEC这两个命令来实现的。MULTI用于开启一个事务,事务开启之后,所有的命令都会被放到一个队列中,最后通过一个EXEC命名来执行事务中的所有命令。

Redis中的事务没有原子性,并不能保证所有的命令都会执行成功。

上图使用 MULTI开启事务,返回OK代表开启事务成功。上图中的(TX)就表示事务开始中,然后设置两个键值对,这里返回QUEUED而不返回OK,表示我们的命令已经被放到了队列中。

这时打开一个终端获取键值,发现为空,这时因为事务还未执行。

 

通过EXEC命令来执行事务。 

在执行事务后,再次获取键值,就可以获取到了。

 事务中的命令出现错误,并不会影响后面命令的执行。这里开启事务后让这三个键自增,由于k4是一个字符类型并不能解析为整数,所有就会出现错误。

 

观察上图获取到的值,发现Redis事务中命令出现错误并不会影响到正确命令的执行。

持久化的定义:

在Redis中,持久化是指将数据存储在磁盘上,以便在Redis重启时可以恢复数据。Redis支持两种主要的持久化方式:

1. RDB(Redis DataBase)持久化:RDB持久化通过将Redis在内存中的数据快照写入磁盘来实现持久化。管理员可以配置Redis定期将数据快照写入磁盘,以便在Redis重启时恢复数据。RDB持久化适合于对数据一致性要求不是非常高的场景。

2. AOF(Append-Only File)持久化:AOF持久化通过将Redis接收到的写命令追加到一个日志文件中来实现持久化。当Redis重启时,它会重新执行这些写命令来恢复数据。AOF持久化通常比RDB持久化更加安全,因为它可以提供更好的数据一致性保证。

持久化使得Redis可以在重启后恢复数据,从而避免了数据丢失的风险。管理员可以根据实际需求选择合适的持久化方式,并根据需要对持久化参数进行调优。

持久化是Redis中一个基于内存的数据库,如果没有持久化,那么一旦服务器重启或者断电,那么之前的所有数据都会丢失。这对于一个数据库是非常致命的。

第一种方式(RDB)   是某一个时间点上数据的完整副本,可以通过配置文件中的save参数来配置。

      

第一个参数表示秒数,第二个参数表示修改次数。

 有上图三种默认配置。

第一种解释为:3600s之内有一次修改就进行一次快照。其他同理。

除了使用配置文件来自动触发快照之外, 还可以使用save命令手工触发快照

 

上图的dump.conf就是生成的快照文件。

快照文件的缺点:

如果服务器在快照之后宕机了,那么最后一次快照之后的所有修改内容都会丢失掉。

 考虑到快照文件的缺点,所有RDB适合更适合用来做备份。

还有一个问题:由于生产环境中我们为Redis开辟的内存区域一般都比较大,那么内存中的数据同步到硬盘这个过程就会持续比较长的时间,这段时间内Redis都处于一个阻塞的状态,不能接收任何请求。

所以为了应对这种情况,Redis提供了叫做bgsave的命令,这个命令会单独创建一个子进程,来负责将内存中的数据写入到硬盘中,这样的话主进程就可以继续处理请求了。但是这个过程中还会有一定的性能损耗,因为fork一个子进程也是需要时间的,这段时间内Redis还是不能处理任何请求。没有办法做到秒级的快照。

 为了解决这种问题Redis又提供了另一种叫AOF的持久化方式。他的原理是在执行写命令的时候,不仅会将命令写到内存中还会将命令写入到一个追加的文件中,这个文件就是AOF。他会以日志的形式来记录每一个写操作。当Redis重启的时候就会通过重新执行AOF文件中的命令来在内存中重建整个数据库的内容。

开启AOF的方式只需要在AOF的配置文件中将appendonly后面的no修改为yes就好了然后保存退出配置文件就好。

进入配置文件的命令为:

vi redis.conf

然后输入/append,就可查看append的配置文件了,前面的查看save配置文件同理。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python+Qt虹膜检测识别

程序示例精选 PythonQt虹膜检测识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonQt虹膜检测识别》编写代码,代码整洁,规则,易读。 学习与应用推…

从0开始学习JavaScript--JavaScript类型化数组进阶

前面的文章,已经介绍了JavaScript类型化数组的基本概念、常见类型和基本操作。在本文中,我们将深入探讨类型化数组的一些进阶特性,包括共享内存、大端小端字节序、以及类型化数组与普通数组之间的转换,通过更丰富的示例代码&#…

读像火箭科学家一样思考笔记05_思想实验

1. 思想实验室 1.1. 思想实验至少可以追溯到古希腊时期 1.1.1. 从那时起,它们就跨越各个学科,在哲学、物理学、生物学、经济学等领域取得重大突破 1.1.2. 它们为火箭提供动力,推翻政府,发展进化生物学,解开宇宙的奥…

算法的奥秘:常见的六种算法(算法导论笔记2)

算法的奥秘:种类、特性及应用详解(算法导论笔记1) 上期总结算法的种类和大致介绍,这一期主要讲常见的六种算法详解以及演示。 排序算法: 排序算法是一类用于对一组数据元素进行排序的算法。根据不同的排序方式和时间复…

弄懂Rust编程中的Trait

1.定义 trait trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 trait 以一种抽象的方式定义共享的行为。可以使用 trait bounds 指定泛型是任何拥有特定行为的类型。 一个类型的行为由其可供调用的方法构成。如果可以对不同类型调用相同的方法的话&#xff…

web:[GXYCTF2019]禁止套娃

题目 打开页面显示为 没有其他信息,查看源代码也是空的 用dirsearch扫一下 可能是git源码泄露,可以用githack获取源码 python Githack.py http://5063c85b-a33d-4b6f-ae67-262231a4582e.node4.buuoj.cn:81/.git/去工具所在的目录找到index.php文件 打开…

USART的标准库编程

使用USART与计算机通信 电脑上只有usb端口 没有TX 和RX需要一个USB转TTL电平模块来实现通信 芯片C8T6中只有三个UASRT 选其中一个UASRT来通信即可 那么如何定位那个USART的TX 和RX引脚呢? 方式1 查找最小系统板引脚分布图 查找USART1的引脚 RTS CTS是硬件流控 CK…

5 个适用于 Linux 的开源日志监控和管理工具

当Linux等操作系统运行时,会发生许多事件和在后台运行的进程,以实现系统资源的高效可靠的使用。这些事件可能发生在系统软件中,例如 init 或 systemd 进程或用户应用程序,例如 Apache、MySQL、FTP 等。 为了了解系统和不同应用程序…

【Python数据结构与算法】--- 递归算法应用-五行代码速解汉诺塔问题.

🌈个人主页: Aileen_0v0 🔥系列专栏:PYTHON数据结构与算法学习系列专栏💫"没有罗马,那就自己创造罗马~" 汉诺塔 两层汉诺塔的演示 三层汉诺塔的走法演示 我不知道有没有朋友跟我一样有一个疑问,如果我们顶端的先放到中间柱子呢?…

从零开始学习typescript——数据类型

数据类型 以前我们用js编写代码的时候,都是直接使用let、var、const 来定义数据类型;js会在运行时来确定数据类型,但是在ts中,可以在声明时就可以指定数据类型。如果你学过其他编程语言,比如c、java就能更好的理解了。…

上门维修安装派单系统小程序APP开发之会员级别设计深度解析

啄木鸟鲁班大师上门安装维修平台APP开发之VIP会员解析,在APP或者小程序里设置的会员叫VIP级别会员,系统一共分为4种会员,注册会员,正式会员,VIP金卡会员,VIP钻卡会员。注册用户是指注册了平台但是没有消费记…

安防视频监控管理平台EasyCVR定制首页开发与实现

视频监控平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多路视频流,也能支持视…

0时区格林威治时间转换手机当地时间-Android

假设传入的是2023-11-01T12:59:10.420987这样的格式 要将格式为2023-11-01T12:59:10.420987的UTC时间字符串转换为Android设备本地时间,您可以使用java.time包中的类(在API 26及以上版本中可用)。如果您的应用需要支持较低版本的Android&…

基于ubuntu20.04安装ros系统搭配使用工业相机

基于ubuntu20.04安装ros系统搭配使用工业相机 1. ROS系统安装部署1.1更新镜像源1.1.1 备份源文件1.1.2 更新阿里源1.1.3 更新软件源 1.2 ros系统安装1.2.1 添加ros软件源1.2.2 添加秘钥1.2.3 更新软件源1.2.4 配置及更换最佳软件源1.2.5 ROS安装1.2.6 初始化rosdep1.2.7 设置环…

如何使用无代码系统搭建软件平台?有哪些开源无代码开发平台?

无代码是什么 无代码开发,也称为零代码(Zero Code)开发,是一种技术概念。无代码开发无需代码基础,适合业务人员、IT开发及其他各类人员使用。他们通过无代码开发平台快速构建应用,并适应各种需求变化&#…

吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化

一、实现注意:展开参数 在上一个视频中,讨论了使用反向传播算法计算代价函数的导数。在本视频中,将简要介绍一个实现细节,即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验 在神经网络中…

MySQL MHA高可用配置及故障切换

一、MHA相关概念 1.什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 …

pytorch中.to(device) 和.cuda()的区别

在PyTorch中,使用GPU加速可以显著提高模型的训练速度。在将数据传递给GPU之前,需要将其转换为GPU可用的格式。 函数原型如下: def cuda(self: T, device: Optional[Union[int, device]] None) -> T:return self._apply(lambda t: t.cuda…

【C++进阶之路】第八篇:智能指针

文章目录 一、为什么需要智能指针?二、内存泄漏1.什么是内存泄漏,内存泄漏的危害2.内存泄漏分类(了解)3.如何检测内存泄漏(了解)4.如何避免内存泄漏 三、智能指针的使用及原理1.RAII2.智能指针的原理3.std:…

Windows安装MongoDB

1、下载MongoDB的zip,解压 2、创建目录 mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\db mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\log 3、创建一个配置文件mongod.cfg&#xff0c…