国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

余额并发扣减一致性,能否使用Redis事务?

发布时间:2019/09/18标签:   余额    点击量:

原标题:余额并发扣减一致性,能否使用Redis事务?
《并发扣款,怎样保障数据的分歧性?》一文的中心观念是:应用CAS悲观锁,在写回余额时加上旧余额的比对,能够在不影响吞吐量的条件下,保障余额的分歧性。文章十分多友人留言问,能不能把余额放到reids里,应用redis的事件性来扣减余额。明天,就这个成绩简略的说一下。redis怎样完成事件性?实质也是悲观锁。在redis客户端履行:$money=GETkey$money=$money-$diffSETkey$money在并发量大的时间,会碰到和《并发扣款,怎样保障数据的分歧性?》中描写的并发分歧性成绩。redis的WATCH和EXEC能够供给相似事件的机制: WATCH观看key能否被修改 假如提交时key被修改,EXEC将前往null,表现事件失利下面保障分歧性的余额扣减能够相似于如许履行:WATCHkey$money=GETkey$money=$money-$diffMULTISETkey$moneyEXEC在WATCH以后,EXEC履行之前,假如key的值产生变更,则EXEC会失利。redis的WATCH为何可能保障事件性,实质上,它应用的就是悲观锁CAS机制。大局部情形下,redis差别的客户端会拜访差别的key,以是WATCH碰撞的几率会比拟小,在秒杀的营业场景,即便应用WATCH,挪用侧依然须要重试。画外音:如《一样是高并发,QQ/微博/12306的架构难度一样吗?》所述,key的拜访会过滤uid属性,以是能够支撑高并发。在CAS机制这一点上,redis和mysql比拟没有额定的上风。redis的机能之以是高,仍是redis内存拜访与mysql数据落盘的差别招致的。内存拜访的缺乏是,数据具有“易失性”,假如重启,能够招致数据的丧失。固然redis也能够固化数据,但假如每次都刷盘,redis反而机能会降落许多。画外音:每个东西都有本人的实用场景,不宜将缓存当数据库用。最初,redis用复线程来幸免物理锁,但mysql多线程也有多线程并发的上风。画外音:各有好坏。论断:能够应用redis的事件性扣减余额,但在CAS机制上比mysql没有上风,高机能是由于其内存存储的起因,带来的副感化是数占有丧失危险。任何离开营业的架构计划都是耍地痞。【本文为51CTO专栏作者“58沈剑”原创稿件,转载请接洽原作者】戳这里,看该作者更多好文【编纂推举】 Redis进阶利用:Redis+Lua剧本完成复合操纵 并发扣款,怎样保障数据的分歧性? 微效劳散布式分歧性形式 并发扣款分歧性优化,CAS下ABA成绩,这个话题还没聊完!!! 并发扣款分歧性,幂等性成绩,这个话题还没聊完!!!【义务编纂:赵宁宁 TEL:(010)68476606】点赞 0

上一篇:从TCP/IP协议谈Linux内核参数优化

下一篇:没有了

返回
版权信息Copyright © 银河官网 版权所有    ICP备案编号:鲁ICP备09013610号