[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,一经查实,立即删除!

相关文章

工控 UI 风格美轮美奂

工控 UI 风格美轮美奂

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

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

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

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

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

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

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

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

项目实训-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…

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”,全部无偿共享给大家!!!开发兼过半年面试官 刚开始…

网络安全等级保护测评

网络安全等级保护 《GB17859 计算机信息系统安全保护等级划分准则》 规定计算机信息系统安全保护等级共分五级 《中华人民共和国网络安全法》 “国家实行网络安全等级保护制度。 等级测评 测评机构依据国家网络安全等级保护制度规定,按照有关 管理规范和…

JVM虚拟机的组成

一、为什么要学习 JVM ? 1. “ ⾯试造⽕箭,⼯作拧螺丝” , JVM 属于⾯试官特别喜欢提问的知识点; 2. 未来在⼯作场景中,也许你会遇到以下场景: 线上系统突然宕机,系统⽆法访问,甚⾄直…

2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024,8月2日-4)

2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)将于2024年8月2-4日在中国厦门召开。ICVISP 2024将围绕“虚拟现实、图像和信号处理”的最新研究领域, 为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提…

迁移方案详解|使用YMP从异构数据库迁移到YashanDB

数据迁移简介 01典型场景与需求 在国产化浪潮下,数据库系统的国产化替代成为了一个日益重要的议题,有助于企业降低对外依赖,提升信息安全和自主性。 以Oracle、MySQL为代表的传统关系型数据库管理系统,在企业应用中占据了重要的…

图书馆借阅表

DDL 用户表 (Users) 图书表 (Books) 图书类别表 (BookCategories) 图书与类别关联表 (BookCategoryRelations) 借阅记录表 (BorrowRecords) 供应商表 (Suppliers) 采购记录表 (PurchaseRecords) CREATE TABLE Users (user_id INT PRIMARY KEY AUTO_INCREMENT,username …

pytorch神经网络训练(VGG-19)

VGG-19 导包 import torchimport torch.nn as nnimport torch.optim as optimimport torchvisionfrom torchvision import datasets, transformsfrom torch.utils.data import DataLoaderimport matplotlib.pyplot as plt 数据预处理和增强 transform transforms.Compose(…

在 Go 中如何让结构体不可比较?

最近我在使用 Go 官方出品的结构化日志包 slog 时,看到 slog.Value 源码中有一个比较好玩的小 Tips,可以限制两个结构体之间的相等性比较,本文就来跟大家分享下。 在 Go 中结构体可以比较吗? 在 Go 中结构体可以比较吗&#xff…

鸿蒙开发HarmonyOS NEXT(一)

最近总听见大家讨论鸿蒙,前端转型的好方向?先入门学习下 目前官方版本和文档持续更新中 一、开发环境 提示:要占用的空间比较多,建议安装在剩余空间多的盘 1、下载:官网最新工具 - 下载中心 - 华为开发者联盟 (huaw…

RTL8305NB从电口模式切换为光口模式

对于RTL8305NB,要从电口模式切换为光口模式,主要操作涉及到PHY page的切换和特定寄存器的配置。以下是详细的操作步骤: PHY Page切换: 首先,需要访问PHY地址8的寄存器31。这个寄存器用于Page的切换。向PHY地址8的寄存…