加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

余额并发扣减同等性,可否行使Redis事宜?

发布时间:2019-09-21 15:27:16 所属栏目:建站 来源:58沈剑
导读:《并发扣款,怎样担保数据的同等性?》一文的焦点概念是:行使CAS乐观锁,在写回余额时加上旧余额的比对,可以在不影响吞吐量的条件下,担保余额的同等性。 文章很是多伴侣留言问,能不能把余额放到reids里,操作redis的事宜性来扣减余额。本日,就这个题目

《并发扣款,怎样担保数据的同等性?》一文的焦点概念是:行使CAS乐观锁,在写回余额时加上旧余额的比对,可以在不影响吞吐量的条件下,担保余额的同等性。

文章很是多伴侣留言问,能不能把余额放到reids里,操作redis的事宜性来扣减余额。本日,就这个题目简朴的说一下。

redis怎样实现事宜性?

本质也是乐观锁。

在redis客户端执行:

  1. $money = GET key 
  2. $money = $money - $diff 
  3. SET key $money 

在并发量大的时辰,会碰着和《并发扣款,怎样担保数据的同等性?》中描写的并发同等性题目。

redis的WATCH和EXEC可以提供相同事宜的机制:

  • WATCH调查key是否被窜改
  • 假如提交时key被窜改,EXEC将返回null,暗示事宜失败

上面担保同等性的余额扣减也许相同于这样执行:

  1. WATCH key 
  2. $money = GET key 
  3. $money = $money - $diff 
  4. MULTI 
  5. SET key $money 
  6. EXEC 

在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事宜?

戳这里,看该作者更多好文

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读