七天玩转Redis | Day4 Redis事务操作

diviner_s diviner_s 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

目录

  • Redis 事务
  • 1)正常执行事务
  • 2)取消事务执行
  • 3)事务编译时异常
  • 4)运行时异常
  • 5)Redis乐观锁

Redis 事务

什么是事务?

  • 事务是一个单独的隔离操作:事务中的所有命令都会序列化、有顺序地执行。事务在执行的过程中,不会被其他客户端发来地命令请求所打断。
  • 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

在MySql中事务有四大特性,分别是:原子性、一致性、隔离性、持久性。简称ACID特性。
在Redis中的事务本质上是一组命令操作的集合,在事务执行的过程中,这些命令会被序列化,按照顺序依次执行。Redis事务特点:一次性、顺序性、排他性。

  • 一次性:指的是Redis中的事务只执行一次,在该事务执行结束之后,这条事务的生命周期就结束了,再次执行事务时需要重新开启事务。
  • 顺序性:指Redis的事务中的所有命令,都是按照先后顺序依次执行的。
  • 排他性:指事务在对某一个数据进行操作的同时,其他事务或其他命令不能对这个数据进行操作。

Redis事务没有隔离性,而且也不是直接执行的。Redis事务执行流程图:

在这里插入图片描述


同时Redis的单条命令具有原子性(也就是要么成功,要么失败),但是对于存在多条命令的Redis事务来说,不具备原子性,也就是说如果事务中有其他命令执行失败了,其他命令还会执行下去。

1)正常执行事务

一个事务正常执行过程:

  1. 开启事务命令:MULTI

  2. 中间输入任意想要执行的命令,将命令入队。返回QUEUED表示入队成功。

  3. 提交事务命令:EXEC

    在这里插入图片描述

    2)取消事务执行

    如果我们在编写事务时想要取消这个事务,我们可以在事务提交之前使用DISCARD命令,将事务取消。其中入队的命令也不会被执行,在下一次执行事务是还需要重新再开启事务。

在这里插入图片描述

3)事务编译时异常

当我们在事务执行或命令入队时出现编写错误,比如格式错误,语法错误等等,此时会发生编译异常,会有错误提示。虽然事务依然能够提交,但是整个事务队列的命令都不会执行。

在这里插入图片描述

4)运行时异常

运行时异常一般不会是因输入错误命令而报错,例如除0等逻辑问题。

注意了!!运行时异常的处理与编译异常不同!在Redis事务中命令存在运行时异常,在提交事务之后,存在错误命令的单条指令执行失败,其他正确命令正常执行!

5)Redis乐观锁

Redis中存在锁机制,分为乐观锁和悲观锁。

  • 悲观锁:认为什么时候都可能出错,所以在任何时候都会加锁
  • 乐观锁:认为什么时候都不会出错,所以什么时候都不会加锁,在更新数据的时候只需要去判断,在此期间是否有人修改过这个数据即可!

实现乐观锁命令:WATCH key [key...]

  • key要监控的字段的索引

我们举一个例子实现一下:
假如将1000块存进银行,然后从银行中消费100元。
我们可以定义一个key为'money'表示银行中我的账户余额,再定义一个'outmoney'字段表示我们消费的数额。我们要开启一个事务并且执行下面这样的一个任务:“money'中减100元,则'outmoney'增加100元,在开启事务之前先使用WATCH命令去监控money字段。

在这里插入图片描述

如图的确实现了'money'中减100元,'outmoney'增加100元,没有其他的问题。但是如果我们再次重复刚才的操作,结果应该是800 200。这次我们先将命令入队不提交(不进行EXEC命令),再打开第二个新的Redis客户端,修改'money'的值,然后再提交(第一个输入EXEC命令)事务,此时会执行失败。

在给字段添加监控的情况下通过事务去操作字段,如果在未提交时,有新的命令修改了字段值,那么事务一定会提交失败,但是在未监控的情况下,事务仍能提交成功!这就是Redis的乐观锁实现!
所以在实现乐观锁时,开启事务之前,一定要先给字段增加监控!
另外注意:Redis在每次事务提交之后,无论事务执行成功与否,该事务都会关闭,监控也会自动取消,在下次执行事务时都需要重新开启!

...全文

相关推荐

国央企创新负责人如何借助智能体技术推动内部技术成果转化?.docx

国央企创新负责人如何借助智能体技术推动内部技术成果转化?

BIZKEEN

演讲计时软件,会议计时软件

演讲计时软件,会议计时软件。目前只测试了win10。win7测试不通过。

叶底寻花

【电力系统优化调度】计及源荷两侧不确定性的含风电电力系统低碳调度(Matlab代码实现)

内容概要:本文提出了一种针对含风电电力系统的低碳优化调度模型,充分考虑了电源侧(如风电出力波动)和负荷侧的双重不确定性,采用模型预测控制(MPC)方法实现滚动优化与实时反馈校正,有效提升了调度方案的鲁棒性与低碳性能。该模型结合现代优化算法与控制策略,构建了计及碳排放成本、机组组合、可再生能源消纳及系统安全约束的综合调度框架,能够在复杂不确定环境下实现电力系统经济、环保与可靠的协同运行; 适合人群:具备一定电力系统运行、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事新能源并网、低碳调度与智能电网相关领域的工程技术人员; 使用场景及目标:①研究高比例可再生能源接入背景下电力系统低碳调度的有效策略;②利用MPC框架应对源荷双侧不确定性,提升调度决策的动态适应能力;③支撑学术论文复现、科研课题开发或实际工程项目的仿真验证与优化分析; 阅读建议:建议读者结合Matlab代码深入理解MPC的实现机制,重点关注不确定性建模、滚动时域优化与约束处理方法,通过调整参数和测试不同场景进行仿真验证,以掌握低碳调度模型的设计逻辑与工程应用要点。

@橘柑橙柠桔柚

通信行业基于MongoDB副本集与分片部署的5G信令数据基座构建:面向高吞吐写入与实时分析的安装优化方案

内容概要:本文系统阐述了MongoDB在通信行业的安装部署实践及其在5G、IoT和AI背景下的深度应用。文章从通信行业数据范式迁移出发,指出传统关系型数据库在应对信令数据、用户画像和设备遥测等半结构化、高并发写入场景下的局限性,强调MongoDB基于BSON文档模型的优势。重点介绍了副本集、分片集群及时序集合三种部署模式的选择依据与配置策略,涵盖操作系统选型、mongod.conf调优参数(如缓存大小、日志设置、绑定IP安全限制)、分片键设计原则以及集群部署顺序等关键技术细节。进一步展示了MongoDB在信令管道、用户画像、IoT遥测和网络分析等典型通信业务中的落地场景,并展望了MongoDB 8.0在时序性能、向量搜索与可查询加密等方面的发展趋势,推动部署架构向边缘-中心协同、安全合规与AI就绪演进。; 适合人群:通信行业后端开发、数据库运维工程师、系统架构师,以及关注NoSQL在高并发、大规模数据场景下应用的技术人员,具备一定数据库和分布式系统基础者更佳。; 使用场景及目标:①掌握面向通信负载的MongoDB副本集与分片集群部署方法;②理解时序集合在基站KPI、设备遥测等场景的优化价值;③构建支持高写入、低延迟、弹性扩展的5G信令与IoT数据基座;④规划符合安全合规与AI融合趋势的下一代数据架构。; 阅读建议:此资源聚焦生产级部署实践,建议结合实际通信业务场景进行配置验证与性能测试,重点关注分片策略、安全加固与版本特性适配,在部署初期即考虑可扩展性与安全性设计。

智能化咨询

产业园区运营负责人如何提升园区内技术成果的转化效率和落地效果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论
收藏 已收藏
分享
返回顶部
diviner_s
diviner_s 优质创作者: 大数据技术领域 优质创作者: 大数据技术领域
CSDN 开源数据库社区 151 成员 481 内容