回覆列表
  • 1 # java架構設計

    首先回答題主的問題:

    1.搶紅包真的是“靠手氣”,在有限的次數內。實際搶紅包經歷已經告訴你了,如果次數足夠多的話,每個人搶的金額在數學上是一樣多的。

    細節描述

    使用者發紅包,從財付通拿到使用者的金額資料,設定紅包的個數、紅包的金額、型別(隨機或平均),儲存這條資料入庫的同時同步至redis(或者先入redis再存庫),扣財付通的錢;

    使用者開始搶紅包:比如50元10個紅包,平均一個5元,那麼隨機金額就是0.01~10元。

    當已經被搶5個紅包總共30元之後,還剩20元餘額和5個紅包個數,那麼第6個人的紅包隨機金額就是0.01~8元之間。每一個紅包都會根據剩餘金額和剩餘個數來重新計算金額,但是要保證最後一個紅包不得小於0.01元,而且最後一個紅包不需要做任何計算,剩多少給多少。

    每條紅包資料增加一個計數器,原子操作剩餘金額和剩餘個數,避免冒領。

    財付通做好每秒20萬入賬準備,實際效果只有8萬筆每秒(TPS 8w/s)。

    每個紅包只有24小時有效期,超過24小時,沒有搶完的紅包返還發起人。

    不會做到真正的隨機,只是偽隨機,無限次數演練的情況下理論上平均,遵循截尾正態分佈。

    金額最大的有兩個,誰先搶到“誰手氣最佳”。

  • 中秋節和大豐收的關聯?
  • 後視鏡起霧看不清怎麼辦?