我们有一个应用程序,当前有线程(约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