1.每个订单都都可以先查询到多少钱,注:下单的时候不能查询。(目前考虑的是查询时放缓存里,但是这个单被查了不一定会被下单,而且缓存的时间不好定)
2.扣钱是在这个单子被接单的时候扣的
3.如果多线程或者循环过来一堆订单,怎么保证账户余额大于0?余额存在DB,关于余额的操作已经通过reids保证余额更新是安全的。
题目如上,欢迎各位赐教!
1.每个订单都都可以先查询到多少钱,注:下单的时候不能查询。(目前考虑的是查询时放缓存里,但是这个单被查了不一定会被下单,而且缓存的时间不好定)
2.扣钱是在这个单子被接单的时候扣的
3.如果多线程或者循环过来一堆订单,怎么保证账户余额大于0?余额存在DB,关于余额的操作已经通过reids保证余额更新是安全的。
题目如上,欢迎各位赐教!
15 回答8.2k 阅读
8 回答6k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.2k 阅读
2 回答3.9k 阅读
1 回答2.2k 阅读✓ 已解决
抛砖引玉:
多线程 扣钱 要保证安全,在扣钱的时刻一定要顺序,保证原子性;
想到两种,1 是 使用redis存余额,redis操作本身是原子的; 2 是 使用数据库乐观锁,数据加版本号,更新数据检验版本号。