项目中涉及到金额操作时,应注意的问题

本文介绍在并发环境下如何保障金额操作的准确性和安全性,提出两种有效的方法:一是通过加锁机制来确保同一时间只有一个操作在执行;二是利用GUID来保证每个金额变更操作的唯一性,并通过直接增加或减少当前余额的方式来减少错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中的金额时敏感数据,不能有半点差错,在操作金额表时也需要采用一些必要的措施,防止并发时金额更新出错,更新延迟等问题。

方法一:

给当前操作金额业务加锁

public static readonly object lockObj = new object();

lock (lockObj)
{
     业务实现  
}

方法二:

金额表中加入Guid字段以标识每次操作,确保每次更新的唯一性。

操作时避免直接将字段赋值为金额,采用当前金额+/-操作金额的方式,减少因金额失误导致的问题。

同时,应遵循一个原则,用户余额发生变动的地方则必须加上金额变动流水。变动前金额和变动后金额的记录,以便日后查账

//如果更新失败,提示用户重试
//更新金额时 需要更新Guid 以保证唯一操作
var sql = string.Format("update account set Balance =Balance-{0},Freeze =Freeze+{0},Guid='{1}' where Guid ='{2}' and id ={3} ", entity.Money, Guid.NewGuid(), account.Guid, account.Id);
var excuteRes = _dbContext.ExecuteSqlCommand(sql);

if (excuteRes == 0)
{
throw new Exception(_localizationService.GetResource("Admin.Account.Withdraw.WithdrawFailedTryAgain"));
     }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值