Redis中的事务和乐观锁实现
创始人
2024-05-12 06:15:53
0

redis事务相关命令:

开启事务:multi

关闭事务:discard

提交事务:exec

 正常执行事务情况:

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zhangsan
QUEUED
127.0.0.1:6379> set age 20
QUEUED
127.0.0.1:6379> set high 172
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) OK
127.0.0.1:6379>

 放弃事务的情况

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zhangsan
QUEUED
127.0.0.1:6379> set age 23
QUEUED
127.0.0.1:6379> set high 172
QUEUED
127.0.0.1:6379> discard
OK
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>

编译异常,代码错误,命令错误情况

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zhangsan
QUEUED
127.0.0.1:6379> set age 26
QUEUED
127.0.0.1:6379> set high 172
QUEUED
127.0.0.1:6379> getset name    ###错误命令
(error) ERR wrong number of arguments for 'getset' command
127.0.0.1:6379> set wight 45
QUEUED
127.0.0.1:6379> exec
(error) EXECABORT Transaction discarded because of previous errors.
127.0.0.1:6379> get name
(nil)
127.0.0.1:6379>
 

 运行时异常,除了语法错误不会被执行且抛出异常后,其他的正确命令可以正常执行

127.0.0.1:6379> multi
OK
127.0.0.1:6379> set name zhangsan
QUEUED
127.0.0.1:6379> set age 23
QUEUED
127.0.0.1:6379> get age
QUEUED
127.0.0.1:6379> incr name
QUEUED
127.0.0.1:6379> exec
1) OK
2) OK
3) "23"
4) (error) ERR value is not an integer or out of range
127.0.0.1:6379> get age
"23"
127.0.0.1:6379>
 

 总结:

由以上可以得出结论,Redis是支持单条命令事务的,但是事务并不能保证原子性(开启事务后执行多条命令)!

Redis乐观锁的实现

多线程测试watch

线程一(打开一个命令行窗口):

127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set money 100
OK
127.0.0.1:6379> set cost 0
OK
127.0.0.1:6379> watch money
OK
127.0.0.1:6379> multi
OK
127.0.0.1:6379> incrby money 20
QUEUED
127.0.0.1:6379> decrby cost 10
QUEUED
127.0.0.1:6379> exec    ###当线程二执行后在执行exec命令
(nil)
127.0.0.1:6379>

线程2(再打开一个命令行窗口) 该事务在线程一事务提交前先执行 

 发现当线程二中修改了key为money的值后,然后线程一执行exec命令后监视器发现money的值发生了变化,因此事务执行失败

乐观锁与悲观锁

悲观锁:什么时候都会出问题,所以一直监视着,没有执行当前步骤完成前,不让任何线程执行,十分浪费性能!一般不使用

乐观锁:在更新数据的时候判断一下,在此期间判断监视的这个数据是否发生变动,没有变动则正常执行,否则执行错误。

总结:

在redis中单条命令是原子性的,但是 事务不保持原子性。

redis是可以支持乐观锁的

相关内容

热门资讯

工会大会流程及主持词 工会大会流程及主持词  篇一:工会主持词  ……市……委工会成立大会  主 持 词  各位领导,会员...
电影大话西游经典台词 电影大话西游经典台词  如果你看星爷的大话西游觉得好玩有趣充满了幽默感,实话说你并没有看懂过。当你想...
五一晚会主持词 五一晚会主持词(通用10篇)  主持词的写作要突出活动的主旨并贯穿始终。在如今这个时代,我们对主持词...
笑傲江湖周云鹏的脱口秀台词 笑傲江湖周云鹏的脱口秀台词  地球人都是中国有个喜剧之王周星驰,而周云鹏才是脱口秀中的剧场之王!看过...
yy活动主持词 yy活动主持词  女:亲爱的朋友们!大家晚会好!我是今晚的主持人XXX,欢迎您走进“鹊桥会”——丫丫...
升国旗仪式主持词 升国旗仪式主持词(精选12篇)  主持词可以采用和历史文化有关的表述方法去写作以提升活动的文化内涵。...
主持词范文 主持词范文  主持词写作  主持词的写作没有固定格式,它的最大特点就是富有个性。不同内容的活动,不同...
主持人正式节目优秀串词 主持人正式节目优秀串词  第一篇:《6.1主持人正式节目串词》  尊敬的老师们、亲爱的同学们大家好:...
篮球赛闭幕式主持词 篮球赛闭幕式主持词范文3篇  篇一:篮球赛闭幕式主持词尊敬的各位领导、各位来宾,裁判员、教练员、运动...
公司晚会主持稿 公司晚会主持稿【三篇】  在现实社会中,各种主持稿频频出现,主持稿大体上可分为会议主持稿、文艺演出晚...
红歌会主持词 红歌会主持词范文  相信我们身边会有喜欢唱红歌的人,下面小编为大家带来了2篇红歌会主持词范文,欢迎大...
圣诞晚会主持词开场白 圣诞晚会主持词开场白(通用12篇)  在社会发展不断提速的今天,我们使用到开场白的机会越来越多,独具...
新春年会主持词 新春年会主持词范文(精选5篇)  主持词的写作要突出活动的主旨并贯穿始终。在当下的社会中,各种集会中...
老年人生日司仪主持词 老年人生日司仪主持词  主持词要把握好吸引观众、导入主题、创设情境等环节以吸引观众。我们眼下的社会,...
庆元旦主持词 精选庆元旦主持词3篇  主持人在台上表演的灵魂就表现在主持词中。在当下的中国社会,各种场合中活跃现场...
农村结婚典礼司仪主持词 农村结婚典礼司仪主持词(通用6篇)  主持词是主持人在台上表演的灵魂之所在。在人们越来越多的参与各种...
升学宴学生家长致辞 升学宴学生家长致辞  在日复一日的学习、工作或生活中,要用到致辞的地方还是很多的,致辞具有能伸能缩,...
家长道德讲堂主持词 家长道德讲堂主持词  道德讲堂就是一个引导人们讲道德,让人长好心的地方。崇德向善是我们中华民族的传统...
沙龙活动主持词 沙龙活动主持词(通用9篇)  主持词是各种演出活动和集会中主持人串联节目的串联词。在人们越来越多的参...
《纨绔》的经典台词 《纨绔》的经典台词  1、庸脂俗粉算得了什么?狐王才是真绝色。傻一时且说天作孽。傻一世便是自作孽了。...