需求是這樣的:
現在公司定期發紅包, 每個禮拜1次
後台每一期會設定
比如說 1元的紅包10個 2元的100個 88元的10個
每一期的紅包有一個總數目 比如現在我說的是第3期搶紅包 總數是 142個
下面是mysql儲存的設定紅包
紅包金額 數量 實際完成數量10 2 12 100 10088 10 320 30 22
目前做的流程是這樣的:
使用者開啟這個頁面,然後開始設定memcache鎖 ,直到程式處理結束(解鎖) 。因為紅包牽扯到進行打款,和結合
那邊什麼時候返回成功資料這個時間大概是3s之內
程式裡面的邏輯是這樣的
1:判斷使用者是否有資格比如帳號是否正確
2:使用者是否搶過紅包
3:紅包數量是否達到
4:隨機分配一個紅包(暫時不考慮機率性的)
5:修改mysql資料庫的那個紅包實際完成數量+1
另外我也想到使用redis的隊列使用具體這樣:
1:後台發布紅包的時候設定一個總數
set red_money_count 142
使用者搶紅包的時候放到隊列裡面用rplush進行設定 (原則是先進先出的原則)
然後在進行分配一個紅包,對應的那個紅包的完成數量+1 ,不過在這期間肯定要和進行互連打款 這個比較耗時。。
現在就是要解決這個耗時問題。。
備忘:目前已經採用memcache枷鎖實現但是還要使用者進行排隊, 必須1個個處理完 使用者體驗一點都不好。。。。。
回複內容:
需求是這樣的:
現在公司定期發紅包, 每個禮拜1次
後台每一期會設定
比如說 1元的紅包10個 2元的100個 88元的10個
每一期的紅包有一個總數目 比如現在我說的是第3期搶紅包 總數是 142個
下面是mysql儲存的設定紅包
紅包金額 數量 實際完成數量10 2 12 100 10088 10 320 30 22
目前做的流程是這樣的:
使用者開啟這個頁面,然後開始設定memcache鎖 ,直到程式處理結束(解鎖) 。因為紅包牽扯到進行打款,和結合
那邊什麼時候返回成功資料這個時間大概是3s之內
程式裡面的邏輯是這樣的
1:判斷使用者是否有資格比如帳號是否正確
2:使用者是否搶過紅包
3:紅包數量是否達到
4:隨機分配一個紅包(暫時不考慮機率性的)
5:修改mysql資料庫的那個紅包實際完成數量+1
另外我也想到使用redis的隊列使用具體這樣:
1:後台發布紅包的時候設定一個總數
set red_money_count 142
使用者搶紅包的時候放到隊列裡面用rplush進行設定 (原則是先進先出的原則)
然後在進行分配一個紅包,對應的那個紅包的完成數量+1 ,不過在這期間肯定要和進行互連打款 這個比較耗時。。
現在就是要解決這個耗時問題。。
備忘:目前已經採用memcache枷鎖實現但是還要使用者進行排隊, 必須1個個處理完 使用者體驗一點都不好。。。。。
直接用mysql進行發紅包不就好了,搶到紅包的記錄在mysql裡面,然後根據mysql記錄進行打款。mysql裡面標記下搶到紅包,跟搶到紅包並且已經付款就好了。這麼幾個紅包要啥memcache,redis。
和進行互連打款,返回成功資料這個時間大概是3s之內。
這個時間不是你寫代碼能夠提高的。