我們有一個應用程序,當前有線程(約50個線程)來處理事務。Redis和Java在多線程應用程序中的幫助!
我們建立了一個redis數據庫,並使用DECRBY
從用戶帳戶中扣除信用額度。
這裏是這個過程的一個例子:
1. Get amount of credits for this transaction
2. Get current credit amount from from Redis: GET <key>
3. If amount of credits exceeds amount cost of transaction continue
4. DECRBY the transaction amount from Redis.
我這裏的問題是顯而易見的,當用戶積分達到0時,它失敗的交易(好),但是它允許約10-20通過線程進行交易。
我曾想過用Redis設置WATCH, MULTI, EXEC
,然後重試,但這不會造成瓶頸(我認爲它叫做競爭條件),因爲線程會不斷爭取完成交易。
有什麼建議嗎?
你希望我們確認添加事務/同步到您的代碼(這是絕對需要的正確性,你似乎就知道了),很可能會引進競爭和因此可能會損害性能?是的,它會。問題的關鍵是什麼? – chetan 2011-02-28 05:26:22
我想知道的是,如果我使用WATCH,MULTI,EXEC和retries,這是做事的最佳方式?此外,由於使用這種方法,確認性能受到傷害。 – James 2011-02-28 05:39:34