Redis - 事务隔离机制

Redis 的事务的本质是 一组命令的批处理 。这组命令在执行过程中会被顺序地、一次性
全部执行完毕,只要没有出现语法错误,这组命令在执行期间是不会被中断。

当事务中的命令出现语法错误时,整个事务在 exec 执行时会被取消。

如果事务中的命令没有语法错误,但在执行过程中出现异常,该异常不会影响其它命令
的执行。(比如incrby一个字符)
Redis 的事务仅保证了数据的一致性,不具有像 DBMS 一样的 ACID 特性。
这组命令中的某些命令的执行失败不会影响其它命令的执行,不会引发回滚。即不具备
原子性。
这组命令通过乐观锁机制实现了简单的隔离性。没有复杂的隔离级别。
这组命令的执行结果是被写入到内存的,是否持久取决于 Redis 的持久化策略,与事务
无关。
Redis 事务通过三个命令进行控制。
muti :开启事务
exec :执行事务
discard :取消事务

在并发场景下可能会出现多个客户端对同一个数据进行修改的情况。

例如:有两个客户端 C 左与 C 右, C 左需要申请 40 个资源, C 右需要申请 30 个资源。
它们首先查看了当前拥有的资源数量,即 resources 的值。它们查看到的都是 50 ,都感觉资
源数量可以满足自己的需求,于是修改资源数量,以占有资源。但结果却是资源出现了“超
卖”情况。
为了解决这种情况, Redis 事务通过乐观锁机制实现了多线程下的执行隔离。
Redis 通过 watch 命令再配合事务实现了多线程下的执行隔离。

 

 

其内部的执行过程如下: 1) 当某一客户端对 key 执行了 watch 后,系统就会为该 key 添加一个 version 乐观锁,并
初始化 version 。例如初值为 1.0
2) 此后客户端 C 左将对该 key 的修改语句写入到了事务命令队列中,虽未执行,但其将该
key value 值与 version 进行了读取并保存到了当前客户端缓存。此时读取并保存的是
version 的初值 1.0
3) 此后客户端 C 右对该 key 的值进行了修改,这个修改不仅修改了 key value 本身,同
时也增加了 version 的值,例如使其 version 变为了 2.0 ,并将该 version 记录到了该 key
信息中。
4) 此后客户端 C 左执行 exec ,开始执行事务中的命令。不过,其在执行到对该 key 进行修
改的命令时,该命令首先对当前客户端缓存中保存的 version 值与当前 key 信息中的
version 值。如果缓存 version 小于 key version ,则说明客户端缓存的 key value
经过时,该写操作如果执行可能会破坏数据的一致性。所以该写操作不执行。

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

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

相关文章

Linux中的堡垒机搭建以及使用

JumpServer搭建 安装应用包 curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash 一路回车即可安装完毕(可根据需求更改) JumpServer的 配置文件路径 /opt/jumpserver/config/config.tx…

数字人er-nerf安装

目录 服务器环境 环境准备 1.下载源码 2.安装Ancoda环境 3.安装cudatoolkit 4.安装cuDNN 5.安装pytorch 6.安装requirements 7.安装tensorflow 8.安装pytorch3d 9.gcc安装 训练准备 训练 1.处理视屏 2.准备眨眼数据 3.头部训练 4.嘴唇 5.身体 6.生成推理音频…

利用transition-group标签包裹li标签,实现输入数据后按Enter键将数据添加到列表中

1.效果图 2.代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><script src"https://cdn.bootcdn.net/ajax/libs/vue/2.3.0/vue.js"></script><div id&quo…

LangChain学习二:提示-实战(下半部分)

文章目录 上一节内容&#xff1a;LangChain学习二&#xff1a;提示-实战&#xff08;上半部分&#xff09;学习目标&#xff1a;提示词中的示例选择器和输出解释器学习内容一&#xff1a;示例选择器1.1 LangChain自定义示例选择器1.2 实现自定义示例选择器1.2.1实战&#xff1a…

EMT(light sr):Efficient Mixed Transformer for Single Image Super-Resolution

EMT 论文地址&#xff1a;Efficient Mixed Transformer for Single Image Super-Resolution 代码地址&#xff1a;Fried-Rice-Lab/EMT: Efficient Mixed Transformer for Single Image Super-Resolution (github.com) 摘要 ​ 最近&#xff0c;基于 Transformer 的方法在单…

Unity 修改游戏对象的旋转角度Rotation的方法

在Unity中要修改游戏对象中的旋转角度&#xff0c;即下图中的Rotation: 有三个方法&#xff1a; 1、 使用欧拉角&#xff08;Euler Angles&#xff09;&#xff1a;欧拉角是一组表示旋转的三个角度值&#xff08;绕X轴的旋转、绕Y轴的旋转和绕Z轴的旋转&#xff09;。 transf…

word中表格跨页

有时候在word中输入内容后&#xff0c;出现断开情况&#xff0c;如下图 处理的方法是&#xff0c;选中表格&#xff0c;右击选项&#xff0c;在行--允许跨页断行勾选即可

妙手ERP特色功能来袭:上线Lazada包邮营销功能,全方位助力卖家高效引流!

包邮是线上消费者作出购买决策的重要因素&#xff0c;据Lazada平台调研显示&#xff1a;73%的受访者希望商品免费配送&#xff0c;有84%的消费者使用过Lazada包邮优惠券&#xff0c;其中75%的消费者对此感到满意。由此可见&#xff0c;包邮已成为打动东南亚消费者下单的主要原因…

【教程】如何将重要文件进行混淆和加密

怎么保护苹果手机移动应用程序ipa中文件安全&#xff1f; ios应用程序存储一些图片&#xff0c;资源&#xff0c;配置信息&#xff0c;甚至敏感数据如用户信息、证书、私钥等。这些数据怎么保护呢&#xff1f;可以使用iOS提供的Keychain来保护敏感数据&#xff0c;也可以使用加…

智选假日酒店大中华区迎来开业、在建500家里程碑

“90后”先锋品牌&#xff0c;智选假日酒店在华实现骄人突破&#xff0c;成就非凡 2023年12月12日&#xff0c;中国上海 — 洲际酒店集团今日宣布&#xff0c;旗下中高端精选服务品牌智选假日酒店迎来大中华区的开业和在建酒店数量突破500家这一发展里程碑。智选假日酒店凭借其…

深入理解Java关键字volatile

前置知识-了解以下CPU结构 如下图所示&#xff0c;每个CPU都会有自己的一二级缓存&#xff0c;其中一级缓存分为数据缓存和指令缓存&#xff0c;这些缓存的数据都是从内存中读取的&#xff0c;而且每次都会加载一个cache line&#xff0c;关于cache line的大小可以使用命令cat…

Oracle(2-17) RMAN Maintenance

文章目录 一、基础知识1、Retention Policy 保留政策2、Recovery Window - Part 1 恢复窗口-第1部分3、Cross Checking 交叉检查4、The CROSSCHECK Command CROSSCHECK命令5、OBSOLETE VS EXPIRED 过时与过期6、Deleting Backups and Copies 删除备份和副本7、The DELETE Comma…

如何使用内网穿透实现iStoreOS软路由R4S公网远程访问局域网电脑桌面

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址…

【生物信息学】scRNA-seq数据分析(一):质控~细胞筛选~高表达基因筛选

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. 质控2. 细胞筛选3. 高表达基因筛选 一、实验介绍 质控~ 细胞筛选 ~高表达基因筛选 二、实验环境 1. 配置虚拟环境 可使用如下指令&#xff1a; conda create -n bio python3.…

vue文件下载请求blob文件流token失效的问题

页面停留很久token失效没有刷新页面&#xff0c;这时候点击下载依然可以导出文件&#xff0c;但是文件打不开且接口实际上返回的是401&#xff0c;这是因为文件下载的方式通过window创建a标签的形式打开的&#xff0c;并没有判断token失效问题 const res await this.$axios.…

java开发的智能聊天机器人_超级AI_支持自动绘画功能

支持Web、Android、IOS、H5等多终端应用。它使用OpenAI的ChatGPT模型实现智能聊天机器人&#xff0c;并支持绘图自动生成Vincent图。未来还将接入国内大型AI模型&#xff0c;如文心一言、统一千问、MOSS等模型&#xff0c;并不断更新以满足用户需求。 AI大脑软件中的AI绘画功能…

SpringBoot中MyBatis-Flex的集成和使用

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

【NSX-T】3.搭建NSX-T环境 —— 以 Compute Manager 的形式注册 vCenter Server

目录 3. 以 Compute Manager 的形式注册 vCenter Server补充说明 参考资料 3. 以 Compute Manager 的形式注册 vCenter Server &#xff08;1&#xff09;在 NSX 用户界面主页上&#xff0c;依次选择 System > Configuration > Fabric > Compute Managers &#xff0…

博客社区资讯APP源码/开源知识付费社区小程序源码/资源社区源码/独有付费阅读+兼容安卓苹果

源码简介&#xff1a; 博客社区资讯APP源码&#xff0c;它是开源知识付费小程序源码&#xff0c;作为资源社区源码&#xff0c;它具有独有付费阅读兼容安卓苹果。它是Typecho后端的。 知识付费社区RuleApp多内容发布&#xff0c;后端基于Typoche博客程序开发带完整安装文档 竟…