【Redis】Redis 事务

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

1.事务特性

        仅保证了数据的一致性

        这组命令中的某些命令的执行失败不会影响其它命令的执行,不会引发回滚。不具备原子性

        这组命令通过乐观锁机制实现了简单的隔离性。没有复杂的隔离级别

        这组命令的执行结果是被写入到内存的,是否持久取决于 Redis 的持久化策略,无持久性

2.事务实现

     2.1.三个命令

        1)muti:开启事务

        2)exec:执行事务

        3)discard:取消事务

     2.2.基本使用

        定义并执行事务:

        799990d9d51446c88b8e7b9966796e31.png

        定义并取消事务:

         5632fe37db2541af9ed2927251c37c5b.png

3.事务异常处理

     3.1.语法错误

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

4c9677e2087146b2856fe89f8d4821a4.png135a1444e6f7456fa20ee7ffcdbe4e3a.png

     3.2.执行异常

        如果事务中的命令没有语法错误,但执行过程中出现异常,该异常不会影响其它命令的执行

4.事务隔离机制

        在并发场景下可能会出现多个客户端对同一个数据进行修改的情况,为了解决这种情况,事务通过乐观锁机制实现了多线程下的执行隔离

     4.1.隔离的实现

        通过 watch 命令再配合事务实现了多线程下的执行隔离

     4.2.实现原理

        1)当某一客户端对 key 执行了 watch 后,系统就会为该 key 添加一个 version 乐观锁,并 初始化 version。例如初值为 1.0

        2)客户端 A 将对该 key 的修改语句写入到了事务命令队列中,虽未执行,但其将该 key 的 value 值与 version 进行了读取并保存到了当前客户端缓存。此时读取并保存的是 version 的初值 1.0

        3)客户端 B 对该 key 的值进行了修改,这个修改不仅修改了 key 的 value 本身,同时也增加了 version 的值,例如使其 version 变为了 2.0,并将该 version 记录到了该 key 信息中

        4)客户端 A 执行 exec,开始执行事务中的命令。不过,其在执行到对该 key 进行修改的命令时,该命令首先对当前客户端缓存中保存的 version 值与当前 key 信息中的 version 值。如果缓存 version 小于 key 的 version,则说明客户端缓存的 key 的 value 已经过时,该写操作如果执行可能会破坏数据的一致性。所以该写操作不执行

        

        

 

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

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

相关文章

如何挑选家用洗地机?需要注意什么?这四款洗地机性价比超高

洗地机结合了扫、拖、吸的功能,一台机器,一个推拉的动作便可以清理干净地面上的干湿垃圾,大大的节省了我们做家务的清洁时间,提升了生活质量。但是面对市面上众多的洗地机型号,我们要怎么去挑选呢,需要主要…

Linux下安装mysql8.0(以tar.xz包安装--编译安装)

前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访! Linux下安装mysql8.0(以tar.xz包安装--编译安装)https://myweb.myskillstree.cn/126.html 目录 一、下载对应自己glic版本的MySQL …

论文解读--High-resolution Automotive Radar Point Cloud Imaging and Processing

高分辨汽车雷达点云成像和处理 摘要 汽车雷达具有体积小、硬件成本低、全天候工作、高分辨率等公认的优点,是高级驾驶辅助系统(ADAS)必不可少的一类重要传感器。然而,低角度分辨率和低成像性能的限制很难满足下一阶段ADAS的需要。新兴的4D成像雷达采用多…

如何打破数据管理僵局,释放数据资产价值?[AMT企源案例]

引言 数据是企业信息运作的核心和基础,是影响企业决策的关键要素,而主数据是数据中的最基础和公共的部分。面临长期以来的数据治理缺失导致的杂论局面,如何有条不紊推进主数据管理,让数据资产“活”起来?S集团的做法非…

Python可以自学但是千万不要乱学,避免“埋头苦学”的陷阱!

前言 Python可以自学但是千万不要乱学! 归根结底因为学习是个反人性的过程! 复盘没学下去的网课,都有以下特点: 😅 臣妾听不懂啊! 初次接触编程遇到太多抽象高深的概念,不了解老师口中的一个…

Android APP读写外置SD卡无权限 java.io.IOException: Permission denied

在物联网应用里,app需要对挂载SD卡读写文件,从 Android 4.4(KitKat)版本开始,Google 引入了一项名为 "Storage Access Framework" 的新功能,该功能限制了应用对外部存储的直接读写权限,要不然就是…

【电容】芯片旁边为什么要接0.1uf(100nF)电容,退耦电容是什么意思,为什么要大电容并小电容

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 ** 一般芯片旁边为什么都会放一个小电容,而且大部分情况下都是100nF ** 1、为什么要放这个电容 首先我们知道这个…

雷森托尔环保科技有限公司见证2024杭州数字供应链装备展潮流

参展企业介绍 青岛雷森托尔环保科技有限公司创建于2018年,位于山东青岛,现注册资本3000万。公司主营生产模压木托盘、化工木托盘、大型设备木包装、出口木托盘、酒柜木酒架等,公司拥有技术人员6人,均为包装设计专业毕业&#xff0…

80.网络游戏逆向分析与漏洞攻防-移动系统分析-利用数据包尝试穿墙

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

Mask2former代码详解

1.整体流程 Mask2former流程如图所示,对于输入图片,首先经过Resnet等骨干网络获得多层级特征,对于获得的多层级特征,一个方向经过pixel decoder(基于DetrTransformerEncoderLayer)得到per-pixel embedding,另外一个方向经过transf…

2024第十六届“中国电机工程学会杯”数学建模A题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 竞赛信息4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…

python对私钥或者Cookie设置和读取环境变量

1. 开发环境 MAC 2. 设置python脚本中的私钥或者cookie的环境变量 vim ~/.bash_profile 打开文件 export COOKIEmy_cookie 设置环境变量 执行source ~/.bash_profile 3.读取环境变量 在pycharm中创建test_env.py文件 import os# 获取环境变量 api_key os.getenv(COOKI…