成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

余額并發(fā)扣減一致性,能否使用Redis事務(wù)?

開發(fā) 開發(fā)工具 前端 Redis
文章非常多朋友留言問,能不能把余額放到reids里,利用redis的事務(wù)性來扣減余額。今天,就這個(gè)問題簡單的說一下。

并發(fā)扣款,如何保證數(shù)據(jù)的一致性?》一文的核心觀點(diǎn)是:使用CAS樂觀鎖,在寫回余額時(shí)加上舊余額的比對(duì),可以在不影響吞吐量的前提下,保證余額的一致性。

文章非常多朋友留言問,能不能把余額放到reids里,利用redis的事務(wù)性來扣減余額。今天,就這個(gè)問題簡單的說一下。

redis如何實(shí)現(xiàn)事務(wù)性?

本質(zhì)也是樂觀鎖。

在redis客戶端執(zhí)行:

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

在并發(fā)量大的時(shí)候,會(huì)遇到和《并發(fā)扣款,如何保證數(shù)據(jù)的一致性?》中描述的并發(fā)一致性問題。

redis的WATCH和EXEC可以提供類似事務(wù)的機(jī)制:

  • WATCH觀察key是否被改動(dòng)
  • 如果提交時(shí)key被改動(dòng),EXEC將返回null,表示事務(wù)失敗

上面保證一致性的余額扣減可能類似于這樣執(zhí)行:

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

在WATCH之后,EXEC執(zhí)行之前,如果key的值發(fā)生變化,則EXEC會(huì)失敗。redis的WATCH為何能夠保證事務(wù)性,本質(zhì)上,它使用的就是樂觀鎖CAS機(jī)制。

大部分情況下,redis不同的客戶端會(huì)訪問不同的key,所以WATCH碰撞的概率會(huì)比較小,在秒殺的業(yè)務(wù)場(chǎng)景,即使使用WATCH,調(diào)用側(cè)仍然需要重試。

畫外音:如《同樣是高并發(fā),QQ/微博/12306的架構(gòu)難度一樣嗎?》所述,key的訪問會(huì)過濾uid屬性,所以可以支持高并發(fā)。

在CAS機(jī)制這一點(diǎn)上,redis和mysql相比沒有額外的優(yōu)勢(shì)。

redis的性能之所以高,還是redis內(nèi)存訪問與mysql數(shù)據(jù)落盤的差異導(dǎo)致的。內(nèi)存訪問的不足是,數(shù)據(jù)具備“易失性”,如果重啟,可能導(dǎo)致數(shù)據(jù)的丟失。當(dāng)然redis也可以固化數(shù)據(jù),但如果每次都刷盤,redis反而性能會(huì)下降很多。

畫外音:每個(gè)工具都有自己的適用場(chǎng)景,不宜將緩存當(dāng)數(shù)據(jù)庫用。

最后,redis用單線程來避免物理鎖,但mysql多線程也有多線程并發(fā)的優(yōu)勢(shì)。

畫外音:各有優(yōu)劣。

結(jié)論:可以使用redis的事務(wù)性扣減余額,但在CAS機(jī)制上比mysql沒有優(yōu)勢(shì),高性能是因?yàn)槠鋬?nèi)存存儲(chǔ)的原因,帶來的副作用是數(shù)據(jù)有丟失風(fēng)險(xiǎn)。

任何脫離業(yè)務(wù)的架構(gòu)設(shè)計(jì)都是耍流氓。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

 

責(zé)任編輯:趙寧寧 來源: 51CTO
相關(guān)推薦

2023-12-01 13:51:21

數(shù)據(jù)一致性數(shù)據(jù)庫

2022-10-19 12:22:53

并發(fā)扣款一致性

2022-08-29 08:38:00

事務(wù)一致性

2020-05-12 10:43:22

Redis緩存數(shù)據(jù)庫

2017-07-25 14:38:56

數(shù)據(jù)庫一致性非鎖定讀一致性鎖定讀

2022-08-11 07:55:05

數(shù)據(jù)庫Mysql

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2024-01-10 08:01:55

高并發(fā)場(chǎng)景悲觀鎖

2022-12-14 08:23:30

2021-03-04 06:49:53

RocketMQ事務(wù)

2024-01-31 09:54:51

Redis分布式

2025-03-10 09:20:00

庫存異常Redis架構(gòu)

2021-04-24 16:58:03

數(shù)據(jù)庫工具技術(shù)

2009-06-18 09:18:08

Oracle檢索數(shù)據(jù)數(shù)據(jù)一致性事務(wù)恢復(fù)

2021-02-05 08:00:48

哈希算法?機(jī)器

2021-02-02 12:40:50

哈希算法數(shù)據(jù)

2023-12-19 09:43:43

MongoDB并發(fā)

2023-12-20 08:11:02

Redis節(jié)點(diǎn)通信

2024-05-08 16:37:17

MySQLRedis數(shù)據(jù)庫

2020-11-24 09:03:41

一致性MySQLMVCC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 超碰在线免费 | 午夜久久av | 亚洲国产中文字幕 | 国产精品夜夜春夜夜爽久久电影 | 精品国产亚洲一区二区三区大结局 | 一区二区三区视频免费看 | 99亚洲 | 一区二区三区精品视频 | 国产精品色| 亚洲精品永久免费 | 午夜电影福利 | 在线播放第一页 | 欧美久久精品一级c片 | 精品一区二区三区电影 | 亚洲成av人片在线观看 | 国产精品久久久久aaaa九色 | 亚洲午夜视频 | 国产精品久久久久久久久久久久冷 | 91精品国产91久久久久久最新 | 在线视频日韩精品 | 麻豆久久久久久久久久 | 一级黄色片美国 | 亚洲精品乱码久久久久久蜜桃91 | 日韩高清一区 | 中文字幕一区在线观看视频 | 精品三级在线观看 | 一级做a| 亚洲电影在线播放 | 91在线视频一区 | 色综合久| 97精品国产一区二区三区 | 精品中文字幕在线观看 | 久久精品手机视频 | 免费一二区 | av在线一区二区三区 | 亚洲精品国产一区 | 91大神在线看| 欧美久久久久久久久中文字幕 | 99re6热在线精品视频播放 | 97碰碰碰| 天天干狠狠干 |