[Redis]事务

Redis事务

Redis 事务提供了一种将多个命令请求打包的功能。然后,再按顺序执行打包的所有命令,并且不会被中途打断。

但是,事务中的每条命令都会与 Redis 服务器进行网络交互,比较浪费资源

所以,日常开发中不建议使用Redis事务

Redis事务操作

使用redis事务的过程是这样的:

  1. 开始事务(MULTI);
  2. 命令入队(批量操作 Redis 的命令,先进先出的顺序执行);
  3. 执行事务(EXEC)。

你也可以通过DISCARD命令取消一个事务

MULTI命令后可以输入多个命令,Redis 不会立即执行这些命令,而是将它们放到队列,当调用了 EXEC 命令后,再执行所有的命令。

 举例

1.首先我们在客户端1开启事务,然后设置key1为111

 2.然后在客户端2获取key1,是获取不到的

 3.这时候执行事务

4.再去客户端2里查询key1,可以查到

 

watch操作

你可以通过WATCH命令监听指定的 Key,当调用exec命令执行事务时,如果一个被watch命令监视的 Key 被 其他客户端/Session 修改的话,整个事务都不会被执行。

会发生三种情况:

1.同一个session中,watch监视的key在multi之前被修改,那么这个事务不会被执行

2.同一个session中,watch监视的key在事务内部被修改,那么这个事务还是会执行成功

3.同一个session中,watch监视的key在事务内部被修改,但是在事务提交之前被其他 session 修改,那么事务不会被执行

下面是第三种情况举例

举例

1.首先我们在客户端1设置一个key1为111,然后使用watch监听key1,然后开启事务,操作key1

 2.这时候,我们去客户端2修改key1

 3.客户端1提交事务,发现提交失败。发现key1是客户端2修改的值,也就是客户端1的事务并没有执行成功

Redis事务特性

我们知道事务具有四大特性:

1. (A)原子性2.(C) 一致性3.(I) 隔离性4.(D) 持久性

但是,在Redis 中不太一样

Redis事务不具备原子性

原子性是指务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用。但是,在redis中,并没有约束和回滚机制,如果事务中的命令出现执行失败的情况,也不会回滚,其他命令依然会执行成功

Redis事务不具备一致性

redis没有约束,也没有回滚机制,事务执行过程中如果某个修改操作出现失败,就可能引起不一致的情况

况且,我们通常说AID保证C,连AID都无法保证,那一致性也更不用说了

Redis事务不涉及隔离性

因为redis是一个单线程模型的服务器程序,所有请求和事务都是串行执行的,自然也就不讨论有没有隔离性了

Redis事务不具备持久性

redis本身就是内存数据库,数据存储在内存中,是不具备持久性的

虽然redis也提供了RDB和AOF这样的持久化机制,但和事务没啥关系

redis事务的错误

1.若在事务队列中存在命令性错误,则执行EXEC命令时,所有命令都不会执行
2.若在事务队列中存在语法性错误,则执行EXEC命令时,其他正确命令会被执行,错误命令抛出异常。

总之,在命令入队时,redis会简单检查语法是否出错,如果出错,视为整个事务无效

但是如果逻辑错了,命令入队的时候是不检查的,只有执行的时候才报错,但其他操作也不会回滚

命令性错误

只有出错的命令不会执行,其他命令依然会执行,这违反了事务的原子性

语法(编译)性错误

在事务中,出现语法错误,会直接报错,后面就算再用exec,之前输入的操作也不会提交执行。

也就是整个事务都不会执行

  

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

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

相关文章

深入探究:Kylin Cube构建时间的影响因素与优化策略

引言 Apache Kylin是一个开源的分布式分析引擎,旨在为Hadoop和Spark平台上的大数据提供快速的SQL查询能力。Kylin通过预计算技术,将数据预先聚合并存储在HBase中,从而实现对大数据集的亚秒级查询响应。Cube是Kylin中的核心概念,它…

工控 UI 风格美轮美奂

工控 UI 风格美轮美奂

出现apimswincrtruntimel110dll丢失不兼容的情况如何快速修复?

在使用多种软件应用的过程中,我们时常面对一些技术难题,其中动态链接库(DLL)文件的兼容性问题尤为常见。这些问题不仅可能干扰应用程序的平稳运行,还有可能危及整个操作系统的稳定。例如,“api-ms-win-crt-…

九、(正点原子)Linux定时器

一、Linux中断简介 1、中断号 每个中断都有一个中断号,通过中断号即可区分不同的中断,有的资料也把中断号叫做中断线。在 Linux 内核中使用一个 int 变量表示中断号。在Linux中,我们可以使用已经编写好的API函数来申请中断号,定义…

使用轻量级虚拟桌面基础架构 (VDI)进行安全快速的访问,实现混合云环境的远程工作

使用轻量级虚拟桌面基础架构 (VDI)进行安全快速的访问,实现混合云环境的远程工作 许多企业都存在混合计算基础结构,其中某些应用程序已迁移到云,另外一些部署在数据中心。 现代虚拟桌面基础架构 (VDI&…

波导尺寸与有效折射率之间的关系

波导尺寸与有效折射率之间的关系 正文正文 我们知道,波导的折射率是波导材料本身的一种特性,这里我们以 S i Si Si 和 S i O 2 SiO_2

【C/C++】this指针的概念和作用

目录 一、this指针的概念 二、this指针的作用 2.1 访问当前对象的成员 2.2 返回对象本身 2.3 区分对象 2.4 在构造函数和析构函数中 2.5 在类的内部调用其他成员函数 2.6 作为参数传递 三、this指针使用 3.1 this指针的使用 3.2 C++ 中this指针使用 一、this…

一个土木工程专业背景的开发者,讲述开源带给他的力量

在前段时间我们举办的“TDengine Open Day”第一季技术沙龙中,TDengine 应用研发高级工程师谭雪峰进行的“开源之路:程序员的成长与探索”主题分享获得了众多参会者的好评。谭雪峰从自身独特的职业发展经历出发,分享了自己在开源领域的种种收…

【华为OD机试】上班之路/是否能到达公司(C++/Java/Python)

题目 题目描述 Jungle 生活在美丽的蓝鲸城,大马路都是方方正正,但是每天马路的封闭情况都不一样。 地图由以下元素组成: 1)”.” — 空地,可以达到; 2)”*” — 路障,不可达到; 3)”S” — Jungle的家; 4)”T” — 公司. 其中我们会限制_Jungle_拐弯的次数,同时_Jung…

前端开发之webpack

安装与入门超详细!webpack入门教程(一)-腾讯云开发者社区-腾讯云

B端系统:增删改查中的新建(增)页面如何设计体验更爽。

在B系统中,增删改查是最基本、最常用的功能之一。这四个操作对于系统的正常运行和数据管理至关重要。其中,新增(新建)页面的设计尤为关键,因为它直接影响着用户体验和系统功能的完整性。 一、新增(新建&…

程序的“通用性”与“过度设计”的困境及具体解决方案

程序的“通用性”与“过度设计”的困境及具体解决方案 在软件工程的实践中,追求程序的“通用性”与避免“过度设计”之间的平衡是一个挑战。下面将针对这一困境,给出具体的解决方案。 一、明确需求与目标 1. 需求分析与优先级排序 在项目开始之前&am…

Windows查看系统激活状态

按 WinR 键启动运行程序,然后输入以下任意命令: slmgr.vbs -xpr slmgr.vbs -div

项目实训-vue(十七)

项目实训-vue(十七) 文章目录 项目实训-vue(十七)1.概述2.问诊类型3.问诊时间统计4.看诊时间统计 1.概述 本篇博客将记录我在数据统计页面中的工作。因为项目并未实际运行,因此我们拟定了一些数据,并构建了…

DIY 智能门禁:用 ESP32 RFID 打造安全便捷的家居体验 (附代码)

一、系统概述 本项目旨在使用 ESP32 微控制器和 RFID 技术构建一个安全可靠的门禁系统。该系统利用 RFID 卡进行身份验证,通过读取卡内存储的唯一 ID,判断用户权限并控制门锁的开关。ESP32 强大的 Wi-Fi 功能还能实现远程监控和管理,方便用户…

【SHAP解释运用】基于python的树模型特征选择+随机森林回归预测+SHAP解释预测

1.导入必要的库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor from sklearn.tree import export…

CesiumJS【Basic】- #013添加点线面(Primitive方式)

添加点线面(Primitive方式) 1 目标 使用图元方式添加点线面 - 绘制点 - 贴图点 - 标签 - 线 - 贴地线 - 面 - 贴地面 - 带洞的面 2 实现 2.1 PrimitiveGeometryManager.ts // src/PrimitiveGeometryManager.tsimport * as Cesium from "cesium";

Stable Diffusion 3 文本生成图像 在线体验 原理分析

前言 本文分享使用Stable Diffusion 3实现文本生成图像,可以通过在线网页中免费使用的,也有API等方式访问。 同时结合论文和开源代码进行分析,理解其原理。 Stable Diffusion 3是Stability AI开发的最新、最先进的文本生成图像模型&#x…

性能工具之 MySQL OLTP Sysbench BenchMark 测试示例

文章目录 一、前言二、测试环境1、服务器配置2、测试拓扑 三、测试工具安装四、测试步骤1、导入数据2、压测数据3、清理数据 五、结果解析六、最后 一、前言 做为一名性能工程师掌握对 MySQL 的性能测试是非常必要的,本文基于 Sysbench 对MySQL OLTP(联…

现在的Java面试都这么扯淡了吗?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!开发兼过半年面试官 刚开始…