<noframes id="bhrfl"><address id="bhrfl"></address>

    <address id="bhrfl"></address>

    <noframes id="bhrfl"><address id="bhrfl"><th id="bhrfl"></th></address>

    <form id="bhrfl"><th id="bhrfl"><progress id="bhrfl"></progress></th></form>

    <em id="bhrfl"><span id="bhrfl"></span></em>

    全部
    常見問題
    產品動態
    精選推薦

    抽獎時如果頻繁點擊會多次請求的解決方法。

    管理 管理 編輯 刪除

    在給客戶做二開的時候增加了一個抽獎類型,最后客戶發現如果頻繁點擊理解請求會出現多次請求的實際返回一個的中獎信息問題,經過排查測試發現原本程序的積分抽獎功能也存在,然后做了一下優化,增加了一個鎖進行限制,然后發現解決問題了。

    440d3202412121558206055.png

    解決方法:

    1.修改app/services/activity/lottery/LuckLotteryServices.php 文件中的    public function luckLottery(int $uid, int $lottery_id)  方法代碼,增加如下代碼:


            // 使用更嚴格的鎖機制
            $lockKey = 'lottery_lock_' . $uid . '_' . $lottery_id;
            $cache = CacheService::redisHandler();
            
            // 增加日志,記錄請求信息
            Log::info('開始抽獎,檢查鎖', [
                'uid' => $uid,
                'lottery_id' => $lottery_id,
                'lockKey' => $lockKey,
                'exists' => $cache->get($lockKey),
                'time' => date('Y-m-d H:i:s'),
                'request_id' => uniqid()
            ]);
    
            // 先嘗試設置鎖
            $isLocked = $cache->setnx($lockKey, 1);
            
            // 如果設置失敗,說明鎖已存在
            if (!$isLocked) {
                Log::info('抽獎鎖已存在,禁止重復抽獎', [
                    'uid' => $uid,
                    'lottery_id' => $lottery_id,
                    'time' => date('Y-m-d H:i:s'),
                    'request_id' => uniqid()
                ]);
                throw new ValidateException('抽獎處理中,請勿重復點擊');
            }
            
            // 設置成功后設置過期時間
            $cache->expire($lockKey, 120);
            
            try {
            
            
            
            
            } catch (\Exception $e) {
                $cache->delete($lockKey);
                throw $e;
            } finally {
                // 釋放鎖前記錄日志
                Log::info('抽獎完成,釋放鎖', [
                    'uid' => $uid,
                    'lottery_id' => $lottery_id,
                    'exists' => $cache->get($lockKey),
                    'time' => date('Y-m-d H:i:s'),
                    'request_id' => uniqid()
                ]);
                $cache->delete($lockKey);
            }

    3e118202412121600464808.png

    7380c202412121601094802.png

    自己看這截圖 及代碼 自己修改,當然我不確定其他版本有這個問題,我這邊客戶使用的是3.0.1版本。

    修改完以后記得重啟swoole,并且代碼如果正常生效會輸出出來響應的日志如:

    [2024-12-12T15:41:28+08:00][info] 開始抽獎,檢查鎖

    [2024-12-12T15:41:28+08:00][info] 抽獎鎖已存在,禁止重復抽獎

    [2024-12-12T15:41:32+08:00][info] 開始抽獎,檢查鎖

    [2024-12-12T15:41:32+08:00][info] 抽獎鎖已存在,禁止重復抽獎

    [2024-12-12T15:41:37+08:00][info] 開始抽獎,檢查鎖

    [2024-12-12T15:41:37+08:00][info] 抽獎鎖已存在,禁止重復抽獎

    [2024-12-12T15:42:11+08:00][info] 開始抽獎,檢查鎖

    [2024-12-12T15:42:11+08:00][info] 抽獎鎖已存在,禁止重復抽獎

    [2024-12-12T15:45:39+08:00][info] 開始抽獎,檢查鎖

    [2024-12-12T15:45:39+08:00][info] 抽獎完成,釋放鎖

    請登錄后查看

    Xiao偉 最后編輯于2024-12-12 16:03:54

    快捷回復
    回復
    回復
    回復({{post_count}}) {{!is_user ? '我的回復' :'全部回復'}}
    排序 默認正序 回復倒序 點贊倒序

    {{item.user_info.nickname ? item.user_info.nickname : item.user_name}} LV.{{ item.user_info.bbs_level }}

    作者 管理員 企業

    {{item.floor}}# 同步到gitee 已同步到gitee {{item.is_suggest == 1? '取消推薦': '推薦'}}
    {{item.is_suggest == 1? '取消推薦': '推薦'}}
    沙發 板凳 地板 {{item.floor}}#
    {{item.user_info.title || '暫無簡介'}}
    附件

    {{itemf.name}}

    {{item.created_at}}  {{item.ip_address}}
    打賞
    已打賞¥{{item.reward_price}}
    {{item.like_count}}
    {{item.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復

    {{itemc.user_info.nickname}}

    {{itemc.user_name}}

    回復 {{itemc.comment_user_info.nickname}}

    附件

    {{itemf.name}}

    {{itemc.created_at}}
    打賞
    已打賞¥{{itemc.reward_price}}
    {{itemc.like_count}}
    {{itemc.showReply ? '取消回復' : '回復'}}
    刪除
    回復
    回復
    查看更多
    打賞
    已打賞¥{{reward_price}}
    936
    {{like_count}}
    {{collect_count}}
    添加回復 ({{post_count}})

    相關推薦

    快速安全登錄

    使用微信掃碼登錄
    {{item.label}} 加精
    {{item.label}} {{item.label}} 板塊推薦 常見問題 產品動態 精選推薦 首頁頭條 首頁動態 首頁推薦
    取 消 確 定
    回復
    回復
    問題:
    問題自動獲取的帖子內容,不準確時需要手動修改. [獲取答案]
    答案:
    提交
    bug 需求 取 消 確 定
    打賞金額
    當前余額:¥{{rewardUserInfo.reward_price}}
    {{item.price}}元
    請輸入 0.1-{{reward_max_price}} 范圍內的數值
    打賞成功
    ¥{{price}}
    完成 確認打賞

    微信登錄/注冊

    切換手機號登錄

    {{ bind_phone ? '綁定手機' : '手機登錄'}}

    {{codeText}}
    切換微信登錄/注冊
    暫不綁定
    亚洲欧美字幕
    CRMEB客服

    CRMEB咨詢熱線 咨詢熱線

    400-8888-794

    微信掃碼咨詢

    CRMEB開源商城下載 源碼下載 CRMEB幫助文檔 幫助文檔
    返回頂部 返回頂部
    CRMEB客服