搶紅包兼搏、秒殺高并發(fā)場景的 mysql 高效實現(xiàn)

原創(chuàng):轉(zhuǎn)發(fā)請聲明來源。

場景分析

這里以搶紅包場景為例沙郭,需求如下:

? ? 1.紅包有個數(shù)限制佛呻,假設(shè)紅包的個數(shù)限制為X。

? ? 2.紅包金額上線限制病线,假設(shè)金額上線為Y吓著。

? ? 3.要求用戶搶紅包的時候,不超過紅包的個數(shù)限制X送挑。

? ? 4.要求用戶搶紅包的時候绑莺,不超過紅包的金額Y。

? ? 5.每個用戶一次紅包活動只能搶一個惕耕。

常規(guī)思路

這里提一下最常見的思路:

? ? 1.在用戶搶紅包時纺裁,檢查當(dāng)前發(fā)出去紅包數(shù)量和金額,并加鎖司澎。

? ? 2.檢查紅包數(shù)量和金額正常的后欺缘,隨機(jī)用戶紅包金額。

? ? 3.然后修改紅包發(fā)出去的數(shù)量和金額惭缰,并給用戶贈送紅包浪南,然后解鎖。

常規(guī)思路的優(yōu)缺點

首先是優(yōu)點

? ? 1.思路簡單

? ? 2.編不下去了漱受。络凿。。

然后是缺點

? ? 1.鎖數(shù)據(jù)回造成大量進(jìn)程等待昂羡,造成浪費資源絮记。

? ? 2.鎖造成的等待,用戶體驗奇差虐先。

? ? 3.對于鎖機(jī)制不太了解的同學(xué)會產(chǎn)生一定的危險性怨愤。

優(yōu)化思路

先分析,為什么常規(guī)思路會慢蛹批?

? ? 1.在搶紅包的時候撰洗,每次都需要檢查紅包的上限 X 和 Y篮愉。

? ? 2.鎖會造成大量進(jìn)程卡頓。

? ? 3.生成紅包的金額時還需要檢查與上限 X 跟 Y 是否有沖突差导。

優(yōu)化解決方案

紅包生成前置

例如紅包個數(shù)上限為X试躏,金額上限為Y。

那么设褐,我在活動進(jìn)行前就把這 X 個紅包插入到數(shù)據(jù)庫

并生成序號:HB1颠蕴、HB2、HB3助析。犀被。。外冀。HBX

那么實際上寡键,到時候用戶就只需要按照先后順序去領(lǐng)取這個有序的紅包隊列了。

這個操作減少了到時候線上所產(chǎn)生的很多的計算量锥惋。最重要的是昌腰,能夠簡單且有效的保證了整個活動的可控性。

利用ID自增保證排隊順序

這里利用到了一個ID生成表膀跌,通過建立 user_id 的唯一索引,保證每個人只能拿到一個序號固灵。

搶紅包步驟如下

? ? 1.活動創(chuàng)建之前捅伤,創(chuàng)建一張ID生成表,ID從 1 開始自增巫玻,且 user_id 唯一丛忆。

? ? 2.活動開始,用戶開始搶紅包操作仍秤。

? ? 3.搶紅包之前熄诡,先插入ID表,獲取插入ID诗力,如果ID > X凰浮,通知用戶已被搶完。

? ? 4.如果 ID <= X苇本,那么恭喜了袜茧,去紅包表領(lǐng)取序號為 ID 的紅包,并走異步發(fā)紅包過程瓣窄。

? ? 5.活動結(jié)束之后笛厦,把相關(guān)用戶領(lǐng)取信息存儲在紅包表,刪除ID生成表俺夕。

方案優(yōu)點

1.不需要代碼實現(xiàn)鎖機(jī)制裳凸。? ? 2.邏輯簡單贱鄙。? ? 3.mysql保證每個用戶只能拿到一個,且有序姨谷。

更多思考

有些朋友提到逗宁,可以用 redis 隊列存儲紅包信息,但是實際上 redis 比較占用內(nèi)存菠秒,需要長期存儲數(shù)據(jù)最好還是放在mysql疙剑。實際上,這里可以使用 redis 的 incr 命令践叠,得到類似在上面提到的 ID 生成表的功能言缤,更加快速且嚴(yán)格遞增,能夠使整個項目的并發(fā)性更高禁灼。

作者:簡公介

鏈接:http://www.reibang.com/p/3ba3c884b635

來源:簡書

簡書著作權(quán)歸作者所有管挟,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弄捕,一起剝皮案震驚了整個濱河市僻孝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌守谓,老刑警劉巖穿铆,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斋荞,居然都是意外死亡荞雏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門平酿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凤优,“玉大人,你說我怎么就攤上這事蜈彼≈妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵幸逆,是天一觀的道長棍辕。 經(jīng)常有香客問我,道長秉颗,這世上最難降的妖魔是什么痢毒? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蚕甥,結(jié)果婚禮上哪替,老公的妹妹穿的比我還像新娘。我一直安慰自己菇怀,他們只是感情好凭舶,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布晌块。 她就那樣靜靜地躺著,像睡著了一般帅霜。 火紅的嫁衣襯著肌膚如雪匆背。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天身冀,我揣著相機(jī)與錄音钝尸,去河邊找鬼。 笑死搂根,一個胖子當(dāng)著我的面吹牛珍促,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剩愧,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼猪叙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仁卷?” 一聲冷哼從身側(cè)響起穴翩,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎锦积,沒想到半個月后芒帕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡丰介,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年副签,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片基矮。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖冠场,靈堂內(nèi)的尸體忽然破棺而出家浇,到底是詐尸還是另有隱情,我是刑警寧澤碴裙,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布钢悲,位于F島的核電站,受9級特大地震影響舔株,放射性物質(zhì)發(fā)生泄漏莺琳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一载慈、第九天 我趴在偏房一處隱蔽的房頂上張望惭等。 院中可真熱鬧,春花似錦办铡、人聲如沸辞做。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榨咐。三九已至,卻和暖如春慎菲,著一層夾襖步出監(jiān)牢的瞬間框喳,已是汗流浹背课幕。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留五垮,地道東北人乍惊。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像拼余,于是被迫代替她去往敵國和親污桦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原創(chuàng):轉(zhuǎn)發(fā)請聲明來源。 場景分析 這里以搶紅包場景為例亭姥,需求如下: 常規(guī)思路 這里提一下最常見的思路: 常規(guī)思路的...
    ankerjian閱讀 5,214評論 6 15
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理稼钩,服務(wù)發(fā)現(xiàn),斷路器达罗,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • 2017.04.05 WED 晴 廣州 今天是踐行早起的第47天侨拦。 清明節(jié)放假三天,天空終于干凈溫暖的像是...
    微笑大媛媛閱讀 311評論 0 0
  • 我以為海的那頭是岸 我以為天空會有彼端 可它們都沒有盡頭 我以為我們只隔了一厘米 可卻跨不過那堵墻的距離 我以為旅...
    風(fēng)霖文字閱讀 469評論 7 7
  • 這些寫給自己辐宾,寫給你的話狱从,希望多年后你還能記得住。很多人缺少了另外一個人便沒有自己叠纹,無論最終你變成怎樣的人季研,要相信...
    轉(zhuǎn)于瞬息閱讀 204評論 0 0