Redis的事务提供了一种“将多个命令打包, 然后一次性、按顺序地执行”的机制。
redis事务的主要作用就是串联多个命令防止别的命令插队。
【资料图】
但是,事务并不具有传统数据库事务的特性,如回滚。
2、事务命令Redis中的事务可以通过以下命令来执行:
MULTI
:用于开启一个事务块,表示之后的命令将被放入事务队列中,但并不会立即执行。事务命令:在MULTI
和EXEC
之间的所有命令都将被添加到事务队列中。EXEC
:用于执行事务队列中的所有命令。执行事务后,事务队列会被清空。DISCARD
:用于取消事务,清空事务队列中的命令。WATCH
:监视一个或多个键,当被监视的键被修改时,事务将被打断。Redis事务分2个阶段:组队/打包阶段、执行阶段
组队/打包阶段:将所有命令加入命令队列执行阶段:依次执行队列中的命令,期间不会被其他客户端发送的请求命令插队或打断。示例:
redis 127.0.0.1:6379> MULTIOKredis 127.0.0.1:6379> SET book-name "Redis从入门到放弃"QUEUEDredis 127.0.0.1:6379> GET book-nameQUEUEDredis 127.0.0.1:6379> SADD tag "Redis" "入门" "放弃"QUEUEDredis 127.0.0.1:6379> SMEMBERS tagQUEUEDredis 127.0.0.1:6379> EXEC1) OK2) "Redis从入门到放弃"3) (integer) 34) 1) "Redis" 2) "入门" 3) "放弃"
3、事务错误处理事务错误处理方式分为两个阶段:组队时错误和执行时错误。
组队时错误:如果在组队过程中出现错误,整个队列中的所有命令都将被取消。执行时错误:如果在执行阶段出现错误,会导致部分命令执行成功,部分命令执行失败。4、事务的冲突问题为了解决事务的冲突问题,可以使用锁,包括悲观锁和乐观锁。
4.1、悲观锁(Pessimistic Lock)悲观锁是一种对数据修改持有悲观态度的并发控制方式。它总是假设最坏的情况,每次读取数据时都默认其他线程会更改数据,因此需要加锁操作。
悲观锁的实现:
传统的关系型数据库使用这种锁机制,比如行锁、表锁、读锁、写锁等,乐观锁相对于悲观锁而言,它假设数据一般情况下不会造成冲突,只在数据提交更新时才检测是否冲突。如果冲突,则返回异常信息,让用户决定如何处理。乐观锁适用于读多写少的场景,可以提高程序吞吐量。
乐观锁的实现:
CAS 实现:Java 中java.util.concurrent.atomic包下面的原子变量使用了乐观锁的一种 CAS 实现方式。版本号控制:一般是在数据表中加上一个数据版本号 version 字段,表示数据被修改的次数。当数据被修改时,version 值会 +1。当线程 A 要更新数据时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值与当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。Redis通过CAS (Check and Set)实现乐观锁,使用WATCH
指令监听一个或多个键,当用户提交修改事务时,会检查监听的键是否发生变化。若没有发生变化,则提交成功;否则,事务失败。
例如,两个客户端在同一时间开始一个事务,他们都对同一个键的值进行了修改,但在执行事务的EXEC
命令时,只能有一个客户端的事务能够成功,另一个客户端的事务会因为键的值发生了改变而执行失败。
客户端1:
# 刷新数据库127.0.0.1:6379> FLUSHDBOK# 设置key值127.0.0.1:6379> set key 10OK# 监听key127.0.0.1:6379> WATCH keyOK# 开启事务127.0.0.1:6379> MULTIOK
客户端2:
# 监听key127.0.0.1:6379> WATCH keyOK# 开启事务127.0.0.1:6379> MULTIOK
客户端1:
# 指令加入队列127.0.0.1:6379(TX)> INCR keyQUEUED# 执行指令,可以看到执行成功,修改了一条数据,值被更新为11127.0.0.1:6379(TX)> EXEC1) (integer) 11
客户端2:
127.0.0.1:6379(TX)> INCR keyQUEUED127.0.0.1:6379(TX)> exec(nil)
5、事务三特性Redis事务具有以下三个特性:
单独的隔离操作:事务中的命令会被序列化并按顺序执行,不会被其他客户端的指令打断。没有隔离级别的概念:事务提交前所有指令都不会被执行。无原子性:事务组队时具有原子性,但在执行阶段出错某段指令,事务过程中的指令仍然会生效。标签:
-
Redis从入门到放弃(5):事务
1、事务的定义Redis的事务提供了一种“将多个命令打包,然后一次性、
-
遗迹2稳定9K秒伤配装攻略详解
很多遗迹2玩家不知道遗迹2稳定9K秒伤配装攻略详解,以下由第一资讯网小
-
Digitalbits正式宣布:结束和罗马&国米&托蒂&贝克汉姆的合作关系
直播吧7月31日讯据《罗马体育报》报道,虚拟货币公司Digitalbits正式宣
-
1050ti和9604g哪个显卡好(1050ti和9604g哪个好)
1050ti显卡在性能上比9604g显卡更好。GTX1050Ti是替换GTX960的,性能略
-
我国科研人员破解水稻生殖隔离之谜 为培育高产品种开辟新路径
近日,由万建民院士领衔、中国农业科学院作物科学研究所和南京农业大学
-
让更多年轻人看到科学的美丽(让更多基础研究人才竞相涌现)
图为清华大学求真书院学生向科学家提问。清华大学丘成桐数学科学中心供
-
G6984次列车临停6分钟 上演“救命接力”
G6984次列车在章丘北站临停,李女士被送往医院急救。列车长杨佳。青岛
-
龙门水库、安格庄水库入库流量达预警标准!保定发布洪水黄色预警
受强降雨影响,漕河保定市满城区龙门水库站2023年7月30日22时入库流量
-
5.6亿收购关联方负资产,这家公司表示:主要是为了养牛
账面价值-2 24万元的控股股东旗下企业,即将被鹏都农牧(002505)以5 62
-
台风“卡努”逐渐增强!浙江省防指调整防台风应急响应!
“杜苏芮”残留云系影响尚未消失 新台风“卡努”又已初显实力!就在刚
-
握手相拥!成都大运会决赛时刻见证青春友谊
成都第31届世界大学生夏季运动会是一次青春、团结、友谊的盛会。来自11
-
漫评|大运会向世界展现自信中国“青春活力”
漫画作者:李思琪7月28日晚,全球瞩目的成都第31届世界大学生夏季运动
-
暑运拉动需求释放 民航市场供需两旺
目前,已经过去了近一个月的时间,暑运拉动需求逐步释放,民航市场热度
-
三棵树发布上半年业绩,净利润3.11亿元,同比增长223.95%
三棵树(603737 SH)发布2023年半年度报告,该公司报告期内营业收入57 36
-
俄称乌利用25架无人机袭击克里米亚地区
据CCTV国际时讯:当地时间7月30日,俄罗斯国防部通报称,当天凌晨乌克
-
“卡努”逐渐向浙江沿海靠近 31日起将影响东海海域
经过了几日的风雨相伴,今天一早,天气暂时恢复了平静,但部分地区依然
-
柠檬海蜇丝(关于柠檬海蜇丝的简介)
柠檬海蜇丝,檬海蜇丝的简介很多人还不知道,现在让我们一起来看看吧!
-
羽球赛2金出炉!中国队1冠1亚,韩国组合复仇成功,何冰娇登场!
今日的女双决赛,凡晨组合对阵金昭映 孔熙容,双方此前14次交手,国羽
-
继武术南拳夺冠后,曹茂园在南棍比赛中再摘金牌
今日,成都第31届世界大学生夏季运动会开始了第二个比赛日的争夺,在武
-
【数码】英伟达 RTX 4090 公版显卡预约,12999 元原价
英伟达去年10月推出的RTX4090旗舰公版显卡现正在京东开启预约,7月31日
-
瑞典狂胜意大利一点不留情面 赛后巴萨姐妹交换球衣温情满满
北京时间7月29日,女足世界杯G组第2轮的较量中,瑞典女足迎战意大利女
-
荣耀80重制重启的方法有哪些
荣耀80Pro直屏版怎么强制重启手机荣耀80Pro直屏版如何强制重启手机?1
-
孙俪首谈离婚,揭露和邓超感情真相
孙俪首度谈及离婚,揭示了她与邓超之间的感情真相。在一次采访中,孙俪
-
刀圈剑圣出什么装备(剑圣出什么装备)
1、AP还是ADAP出杀人书帽子沙漏巫妖鞋子AD出饮血饮血饮血红叉红叉红叉
-
佛山办理居住证的流程及条件
一、佛山居住证办理的流程佛山居住证办理流程为:1 申请人持所需材料到
-
高标准打造低空经济产业园
7月28日,江西省赣州市南康区中国赣州低空经济产业园,技术人员在保养C
-
重庆在哪里报名当兵 ...但是在重庆上学,高中毕业了想去当兵,请问可以在...
今天,大学路小编为大家带来了重庆在哪里报名当兵 但是在重庆上学,高
-
中国铜业拟将中矿国际100%股权委托云南铜业管理
中国铜业拟将中矿国际100%股权委托云南铜业管理
-
紧急提醒!风险未解除!安溪提升防暴雨应急响应为Ⅰ级
紧急提醒!风险未解除!安溪提升防暴雨应急响应为Ⅰ级
-
黑龙江省气象台发布龙卷预警
全省天气情况29日夜间到30日白天:哈尔滨东部、佳木斯东部阴有中雨,大