首先回答題主的問題:
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小時,沒有搶完的紅包返還發起人。
不會做到真正的隨機,只是偽隨機,無限次數演練的情況下理論上平均,遵循截尾正態分佈。
金額最大的有兩個,誰先搶到“誰手氣最佳”。
首先回答題主的問題:
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小時,沒有搶完的紅包返還發起人。
不會做到真正的隨機,只是偽隨機,無限次數演練的情況下理論上平均,遵循截尾正態分佈。
金額最大的有兩個,誰先搶到“誰手氣最佳”。