java 大并发 金额更新,线上账务系统余额并发更新问题记录,账务余额

线上账务系统余额并发更新问题记录,账务余额

线上账务系统余额并发更新问题记录

某电商平台,某天线上用户报bug说账户余额信息与交易流水对不上。可以认为是数据库并发更新问题,由此定位出具体原因,并给出解决方案。

问题现象

场景描述

线上账务系统,在定时结算给卖家钱时,且高并发量的情况下,出现提现x元(假设当前用户余额为x元)余额为0后,再转入该账户一笔钱(假设为y元),结果账户余额变为了x+y 元,导致用户余额错误。 ps:账户余额的变更都是在事务中update的

环境说明

mysql5.7 + innodb,事务隔离级别是REPEATABLE-READ

场景模拟

我们简化下线上的数据结构,进行场景模拟。 数据表如下:

‘账户主表’

CREATE TABLE user (

uid int(11) NOT NULL COMMENT '类型id+自增序列',

name varchar(32) DEFAULT NULL,

PRIMARY KEY (uid)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='账户主表'

‘账户余额明细表’

CREATE TABLE user_account (

uid int(11) NOT NULL,

amount decimal(19,4) DEFAULT 0 COMMENT '账户余额',

PRIMARY KEY (uid)

) ENGINE=InnoDB DE


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部