账户余额更新优化

业务场景
用户预存一定余额,可以用余额在平台购买套餐商品,支付扣除余额需控制并发,当前采用的是乐观锁方式。即每个用户的余额记录都有一个版本号,更新记录时,需要带上版本号。版本号采用整数递增。
问题
当有两个扣减余额的操作同时发生时,其中一个有几率失败。失败结果直接返回给用户,此时用户操作重试即可,但会影响用户体验。如果一直处于高并发状态,用户可能会连续操作失败多次。主要针对此扣款失败场景进行优化。
方案演进
增加失败重试

int i = 0, max = 3;//最多尝试3次
while (i < max && !success) 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,我无法直接为您提供代码,但我可以为您提供一些基本的思路和代码片段,以供参考。 首先,我们需要创建一个基类 Account,包含账户号码、账户类型、账户名、开户日期、账户余额等属性和方法: ```c++ class Account { protected: int accountNumber; string accountType; string accountName; string openDate; double balance; public: Account(int accountNumber, string accountType, string accountName, string openDate, double balance); virtual ~Account(); virtual void deposit(double amount); virtual void withdraw(double amount); virtual void transfer(Account* dest, double amount); virtual double getBalance(); virtual void showInfo(); virtual void modifyAccount(string accountType, string accountName); virtual void closeAccount(); }; ``` 接着,我们需要创建两个子类 SavingAccount 和 CheckingAccount,分别继承自 Account 类: ```c++ class SavingAccount : public Account { public: SavingAccount(int accountNumber, string accountName, string openDate, double balance); ~SavingAccount(); }; class CheckingAccount : public Account { public: CheckingAccount(int accountNumber, string accountName, string openDate, double balance); ~CheckingAccount(); }; ``` 在子类中,我们可以根据需要重写父类的虚函数,实现多态性。 例如,在 SavingAccount 中,我们可以重写 deposit 函数,实现存款的操作: ```c++ void SavingAccount::deposit(double amount) { balance += amount; cout << "成功存款 " << amount << " 元,当前余额为 " << balance << " 元。" << endl; } ``` 接着,我们可以创建一个 AccountManager 类,用于管理所有的账户信息: ```c++ class AccountManager { private: vector<Account*> accounts; public: AccountManager(); ~AccountManager(); void addAccount(Account* account); void removeAccount(int accountNumber); Account* findAccountByNumber(int accountNumber); void deposit(int accountNumber, double amount); void withdraw(int accountNumber, double amount); void transfer(int srcAccountNumber, int destAccountNumber, double amount); void showAccountInfo(int accountNumber); void modifyAccountInfo(int accountNumber, string accountType, string accountName); void closeAccount(int accountNumber); }; ``` 在 AccountManager 中,我们可以添加账户、删除账户、查找账户、进行存款、取款、转账等操作。同时,我们也可以提供良好的用户界面,优化用户的体验感。 最后,我们可以在 main 函数中创建一个 AccountManager 实例,并测试各种功能: ```c++ int main() { AccountManager manager; // 添加账户 Account* account1 = new SavingAccount(1001, "张三", "2020-01-01", 1000); manager.addAccount(account1); Account* account2 = new CheckingAccount(1002, "李四", "2020-01-01", 1000); manager.addAccount(account2); // 存款 manager.deposit(1001, 500); // 取款 manager.withdraw(1002, 200); // 转账 manager.transfer(1001, 1002, 300); // 查询余额 manager.showAccountInfo(1001); manager.showAccountInfo(1002); // 修改信息 manager.modifyAccountInfo(1001, "储蓄账户", "王五"); // 注销账户 manager.closeAccount(1002); return 0; } ``` 这只是一个简单的示例,您可以进一步扩展并完善系统的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值