【Redis学习总结】5. Redis的事务

【Redis】事务的概念及用法 对于Redis来说,它本身支持事务的概念,但它不是传统意义上ACID的事务,同时也没办法保证数据的完整性,但是通过MULTI、EXEC、WATCH这样的机制可以保证应用之间的数据的隔离性,解决线程安全的问题。 阅读详情

1.定义

可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞

 

2.常用命令

(1)正常执行 MULTI、EXEC

         

(2)放弃事务 discard

         

(3)全体连坐

         

(4)冤头债主

        

       【提示】全体连坐可以理解为编译错误,冤头债主可以理解为运行错误!

 

(5)watch监控

         悲观锁/乐观锁/CAS(Check And Set)

         悲观锁(Pessimistic Lock):顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁

         乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,
         乐观锁策略:提交版本必须大于记录当前版本才能执行更新

 

案例

 (1)初始化信用卡可用余额和欠额

          

 

  (2)无加塞篡改,先监控再开启multi,保证两笔金额变动在同一个事务内

           

          【提示】不加塞的意思就是在watch的过程中没有别的线程操作watch的key的值

 

   (3)有加塞篡改,监控了key,如果key被修改了,事务的执行失效

            

  (4)unwatch:放弃watch的所有key

           

 

总结

Watch指令,类似乐观锁,事务提交时,如果Key的值已被别的客户端改变,整个事务队列都不会被执行

通过WATCH命令在事务执行之前监控了多个Keys,倘若在WATCH之后有任何Key的值发生了变化,EXEC命令执行的事务都将被放弃,同时返回Nullmulti-bulk应答以通知调用者事务执行失败(加塞会导致事务失败)

 

3. 三阶段

开启:以MULTI开始一个事务

入队:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面

执行:由EXEC命令触发事务

 

4. 三特性

单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

没有隔离级别的概念:队列中的命令没有提交之前都不会实际的被执行,因为事务提交前任何指令都不会被实际执行

不保证原子性:redis同一个事务中如果有一条命令执行失败,其后的命令仍然会被执行,没有回滚

Unity物理驱动3D汽车实现:从刚体控制到参数调优 在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案 阅读详情

相关推荐

Ansys Zemax导入CAD文件避坑指南:STL/STEP/IGES格式选择与性能优化

本文深度解析了在Ansys Zemax中导入CAD文件的核心要点与性能优化策略。针对STL、STEP、IGES等主流格式,详细对比了其几何表示、精度与适用场景差异,并提供了基于模型特征的格式选择决策树。文章重点分享了体元、弦公差等高级参数的调优技巧,以及处理复杂装配体和避免精度陷阱的实战指南,旨在帮助光学工程师提升仿真效率与结果可靠性。

weixin_29202687的博客 437

redis事务 watch监控

进入 ./redis-cli -h 192.168.121.188 -p 6379 开启事务 multi 命令要入队列 exec执行命令 取消事务 discard 语法有错误,事物都被取消 运行时报错,谁错找谁 watch监控类似于乐观锁 ...

fx0909的博客 684

鸿蒙手机卸载内置应用 adb连接

**傻瓜式删除鸿蒙系统内置应用,自己亲测有效。**

JJDXBT的博客 3万+

redis学习5:redis事务

目录 redis事务 意义 使用 四种情况 case1:正常执行  case2:放弃事务 case3:全体连坐 case4:冤头债主 watch监控 三个阶段 三个特性 redis事务 可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞。 解释下加塞:就是...字面意思啦,就是加入其它命令 意义...

qq_37410328的博客 397

DETRs with Collaborative Hybrid Assignments Training论文阅读与代码

在这篇论文中,作者观察到在DETR中将过少的 Query 分配为正样本,采用一对一的集合匹配,会导致对编码器输出的监督稀疏,严重损害编码器的区分特征学习,反之亦然,也会影响解码器中的注意力学习。为了缓解这个问题,作者提出了一种新颖的协同混合分配训练方案,名为Co-DETR,以从多样的标签分配方式中学习更高效、更有效的基于DETR的检测器。这种新的训练方案可以通过训练多个并行辅助 Head ,以一对多的标签分配方式(如ATSS和Faster RCNN)进行监督,轻松增强端到端检测器中编码器的学习能力。

qingjing0413的博客 1156

STM32踩坑--NoST-LINK detected

这里出现的NoST-LINK detected是没有扫描到端口 在我使用一段Fly-MCU后,有一天突然发现出现如上错误,再检查的过程中检查以下几点 1.STM32 魔术棒的设置 1.1Debug设置 1.2 utilities 设置没有问题,与原来一样又看了下端口——在设备管理器中;也没有问题 ...

qq_53002477的博客 2万+

redis学习笔记5(redis事务)

redis事务是可以一次执行多个命令,本质上是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不允许加塞。redis只能保证一个client发起的事务中的命令可以连续的执行,中间不会插入其他client的命令。由于redis是由单线程来处理所有client的请求,所有可以很容易做到这点。一般情况下redis接收一个client发来的命令后会立即处理并返回结果。

sias1991的专栏 439

【论文精度】生成式预训练模型——BART(Bidirectional and Auto-Regressive Transformers)

​ BART是一个预训练的seq2seq的去噪自编码(denoising autoencoder)模型,BART以下方式进行训练①用任意的噪声函数(noising function)去破坏文本;②学习一个模型来重建原始文本。它使用一个标准的基于transformer的神经机器翻译架构,可以看作是BERT(双向编码器)、GPT(left-to-right解码器)以及其他预训练方案的推广。

weixin_45828972的博客 7450

Redis5学习笔记之三:事务、锁和集成

redis事务的本质:一组命令的集合,一个事务中的所有命令都会被序列化,在执行事务的过程中,会按照顺序执行放弃事务:discard。

大龄IT民工 847

Python爬虫教程:如何爬取多平台电商商品信息(价格、评价、库存)

本文介绍了如何编写一个跨平台电商商品爬虫,爬取多个平台的商品信息,包括商品名称、价格、评价等数据。通过Python的爬虫库(如requestsSelenium)和数据处理库(如pandasmatplotlib)的结合,我们可以高效地获取和分析电商平台上的商品信息。

2201_76125261的博客 918

14、方法论 - 自顶向下与自底向上的结合

本文探讨了如何将自顶向下的规范驱动方法与自底向上的组件构建方法相结合,以形成更加全面的编程理论。通过引入代数法则,简化逻辑关系、提高代码可读性并支持形式化验证,结合实际案例(如智能家居控制系统)展示了如何在设计和实现阶段确保系统的正确性和可靠性。文章还讨论了工具支持的重要性,并提出了未来发展的方向。

lstm7chronicler的博客 176

Redis个人学习笔记5---事务

事务 Redis事务本质是一组命令的集合,一个事务中的所有命令都会被序列化,在事务执行的过程中,会按照顺序执行 一次性、顺序性、排他性 执行一些列的命令 Redis事务没有隔离级别的概念 所有的命令在事务中并没有直接被执行,只有发起执行命令的时候才会执行 Redis单条命令是保证原子性的,但是事务不保证原子性 redis的事务: *开启事务(multi) *命令入队(...) *执行事务(exec) 正常执行事务 127.0.0.1:6379> multi OK 127.0.0.

qq_42038061的博客 138

Python 3.13.7 (64-bit)安装弹窗提示:Setup failed:0x80070643 - 安装时发生严重错误...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 2118

[学习记录] Redis 5. 事务和锁机制,秒杀案例 Demo

[学习记录] Redis 5. 事务和锁机制,秒杀案例 Demo

负负得正的博客 479

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Redis学习笔记(5)-redis事务原理及其应用

Redis中的事务是一组redis命令的集合。这一组redis命令和一个普通的redis命令一样,都是redis执行的最小单位。这一组redis命令要么不执行,要么全部执行。事务中的所有redis命令都是按顺序执行,中间不会被插入其他不相关的命令。 redis事务的开启,执行和关闭 要打开事务,可以使用multi命令,之后键入的redis命令,都会被缓存到队列里面来,这一点从返回值queued...

chenyang1010的博客 622

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

学习日志day64(2021-11-02)(1、Redis配置文件 2、Redis的发布和订阅 3、Redis的新数据类型 4、Redis Jedis 测试 5、Redis事务)

学习内容:学习Redis(Day64) 1、Redis配置文件 2、Redis的发布和订阅 3、Redis的新数据类型 4、Redis Jedis 测试 5、Redis事务 1、Redis配置文件 (1)开头定义了一些基本的度量单位,配置大小单位,只支持bytes,不支持bit,大小写不敏感 (2)网络相关配置,找到bind变量 默认情况bind=127.0.0.1只能接受本机的访问请求,不写的情况下,无限制接受任何ip地址的访问,服务器是需要远程访问的,所以需要将其注释掉。 (3)本机访问保护模式设置,

huzige_的博客 184

阿里发布的Redis开发文档,涵盖了所有的redis操作

今天给大家分享的是阿里《Redis 全套学习笔记.pdf》,图文并茂,特别详细,基本上涵盖了 Redis 所有知识点 内容截图 redis概述和安装

javaAnPou的博客 608

Redis系列持续更新

目录 本系列学习笔记以 redis5.0.7 版本为基础进行学习. 基础概念 Redis简介及其他数据库对比 Redis的多个数据库 Redis的单机部署(源码安装/docker安装) Redis的集群部署(源码安装/docker安装) 数据结构 五种常用的数据类型 常用的命令以及浅浅的了解内部结构。 String list hash set zset 不常用,知道会...

方小白 254

[Redis][事务]详细讲解

[Redis][事务]详细讲解

SnowK博客 5325

Redis之Redis事务

文章目录一、Redis事务的概念二、Redis事务没有隔离级别的概念三、Redis不保证原子性四、Redis事务的三个阶段五、Redis事务相关命令六、Redis事务使用案例总结 Redis之Redis事务 一、Redis事务的概念 Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命

weixin_37548768的博客 1万+

【Redis 探秘】带你深入学习 Redis 事务处理机制

博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主。

激流丶的博客 1899

Redis篇-第5章 Redis事务

第一节 概念1、定义使用 Redis 事务可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。2、作用一个队列中,一次性、顺序性、排他性的执行一系列命令。第二节 Redis 事务 VS 数据库事务第三节 redis事务的使用。

正版踏雪无痕的博客 1106

【Redis】事务

【Redis】事务

m0_72563041的博客 999

Redis事务详解

Redis事务的本质是一组Redis命令的有序集合,其核心设计目标是保证这组命令的批量执行、串行执行,即在事务执行期间,不会被其他客户端的命令插队,以此实现弱原子性(区别于MySQL的强原子性)。可以通俗理解为:Redis事务就是把多个命令“打包”,放入一个执行队列,最终要么按顺序执行队列中所有命令,要么在特定异常下放弃所有命令执行,不会出现“部分执行、部分未执行”的中间状态(执行时错误除外,后文详细讲解)。Redis事务的核心是MULTI-EXEC。

weixin_43829708的博客 1090

Redis 事务

Redis 事务 Redis 事务可以一次执行多个命令, 并且带有以下两个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。 一个事务从开始到执行会经历以下三个阶段: 开始事务。 命令入队。 执行事务。 以下是一个事务的例子...

努力奔跑 2万+

Redis的事务机制

一、Redis事务的相关命令: 1、MULTI: 用于标记事务块的开启。MULTI执行之后,Redis会将后续的命令逐个放到一个缓存队列中,当EXEC命令被调用时,所有队列中的命令才会被原子化执行。 2、EXEC: 在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。当使用WATCH命令时,只有当受监控的键没有被修改时,EXEC命令才会执行事务中的命令。 3、DISCARD: 放弃事务,清除事务队列中的命令,然后恢复正常的连接状态。如果使用了UNWATCH命令,那么DISCARD命令

张维鹏的博客 1万+

redis的事务

redis通过 multi, exec等命令来实现事务功能,是一种在一个事务内,将事务内的多个请求打包,然后一次性、按顺序地执行多个命令,在事务执行期间,服务器而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。

Zj_boring的博客 1777
上一篇: 【Redis学习总结】4. Redis的持久化
下一篇: 【Redis学习总结】6. Redis的复制(Master/Slave)
Rita楠神
博客等级 码龄9年 27粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值