php 高并发余额正确_如何保证高并发下账户余额正确性?

随着移动支付的越来越便捷,如何保证账户余额正确性变成了难题。尤其针对没有支付系统开发经验的程序员,如下咱们解读一下此类问题(拿支付宝举例):

支付宝需要有个账户记账,现在很多第三方公司使用支付宝作为结账业务主要手段,故出现了很多热点账户。比如互联网大商家,打车业务,快的,滴滴等。账号有余额,大并发交易下余额快速变化,需要保证账户余额正确性。

需求如下:

1.账户减款

2.账户加款

3.读取总即时金额

设计方案:

最简单设计: 帐户表+流水表. 每次帐户加减款都需要增加流水,和帐户变动.

业务需求: 高并发帐户.

技术选择 1. 悲观锁(高并发帐户), 乐观锁(普通并发帐户).  3. 顺序化,把同步转异步,使用mq 降低峰值.

存储选择: redis或者数据库. redis本身并发能力就是比数据库要好. 但是单机支持的数据量不如数据库大. 只存放account的值的话到还好.根据场景自己作区分。

账户转账分两个接口,一个可扣成负数,一个不能扣成负数.

1 如何消除余额竞争呢?

方案一:变成两个账户   模仿 担保交易,设置两个账户    1. 扣款账户  2. 加款账户

1.1.  商家都是频繁加款 ,加款账户只记流水,不计算余额. 避免频繁竞争

1.2.  加款帐户的流水定时汇总到扣款帐户上.

1.3   扣款账户用于退款和提现, 因为频率不高.  即保证余额控制,也没有并发问题.  退款有些业务能扣成负数,有些业务不能.

缺点: 进入的钱不一定能时时能用. (对小商家不适用,比较计较)

优点: 这样就避免了热点账户的余额计算。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值