查询订单价格后,批量下单,真正扣钱时机为接单时,如何保证账户余额充足?

1.每个订单都都可以先查询到多少钱,注:下单的时候不能查询。(目前考虑的是查询时放缓存里,但是这个单被查了不一定会被下单,而且缓存的时间不好定)
2.扣钱是在这个单子被接单的时候扣的
3.如果多线程或者循环过来一堆订单,怎么保证账户余额大于0?余额存在DB,关于余额的操作已经通过reids保证余额更新是安全的。

题目如上,欢迎各位赐教!

阅读 3.9k
2 个回答

抛砖引玉:

多线程 扣钱 要保证安全,在扣钱的时刻一定要顺序,保证原子性;

想到两种,1 是 使用redis存余额,redis操作本身是原子的; 2 是 使用数据库乐观锁,数据加版本号,更新数据检验版本号。

可以加个冻结金额的字段,对应你的预扣钱的概念;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题