怎麼在代碼層處理app用戶端同個人同時並發多個請求?

來源:互聯網
上載者:User
怎麼在代碼層處理app用戶端同個人同時並發多個請求?

有個分享統計的介面,有時候用戶端同個人會並發多個請求過來,服務端做了叢集,最先通過redis 做一個cache(uid+articleid)判斷是否有,結果直接繞過.

有沒有什麼辦法直接在代碼邏輯裡面判斷到,然後直接返回,而不是要到mysql那裡通過唯一索引什麼的來解決.

謝謝~~~

回複內容:

怎麼在代碼層處理app用戶端同個人同時並發多個請求?

有個分享統計的介面,有時候用戶端同個人會並發多個請求過來,服務端做了叢集,最先通過redis 做一個cache(uid+articleid)判斷是否有,結果直接繞過.

有沒有什麼辦法直接在代碼邏輯裡面判斷到,然後直接返回,而不是要到mysql那裡通過唯一索引什麼的來解決.

謝謝~~~

記錄這個人訪問時間間隔,如果頻率超出限定值,直接返回錯誤碼~~

同個人的請求也可以通過redis控制請求頻率啊。redis中key:uid+operation 通過increment(原子操作) 拿鎖限制。

你的需求是並發安全方面的,就是如果同時多個請求,每個請求都涉及到查詢,判斷,更新這樣的三個步驟,由於多個線程同時進行前兩部操作,而導致判斷被繞過。
解決辦法:
1.redis的watch,將查詢到更新這三個步驟綁定到一起,其實直接使用redis的事務應該就可以了,無需使用watch,具體請實際測試
2.利用redis設計一個分布式鎖,可參考官方給出的方案:http://www.oschina.net/translate/redis-distlock

3.利用隊列,將同一個使用者的請求放入同一個隊列,依次進行處理

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.