System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于分布式缓存的异步热点账户处理的方法技术_技高网

一种基于分布式缓存的异步热点账户处理的方法技术

技术编号:40870424 阅读:4 留言:0更新日期:2024-04-08 16:37
本发明专利技术公开了一种基于分布式缓存的异步热点账户处理的方法,将账户操作记录信息缓存在redis这类的分布式缓存中间件中,用来减少请求访问到数据库的次数,减轻数据库的压力,防止过多修改将数据库连接池打满的情况出现;当账户发生出账或入账操作时,特别是在高并发操作的场景下,账户余额因其特殊性必须只有一个线程能够对其进行修改,这种情况下数据库只能通过排他锁(悲观锁或乐观锁)来保证数据一致性,会大大降低系统吞吐量,本发明专利技术是采用异步的方式基于分布式缓存来达到账户余额一致性方法,主要考虑应对高流量、高TPS的场景,保障用户的使用体验、以及杜绝金额错误产生。

【技术实现步骤摘要】

本专利技术涉及的是热点账户处理,具体涉及一种基于分布式缓存的异步热点账户处理的方法


技术介绍

1、业务背景是热点账户交易的性能瓶颈,高并发账务支付指令到来,要保证数据一致性,使账户余额不会修改错误,传统情况下多数需要使用数据库锁来保证只有一个线程能能够操作账户金额修改,会大大降低系统性能,很难及时的看到支付的最新状态,为了提升用户的使用体验,通过一些数据结构上与分布式缓存和定时任务方法设计,来提升用户的使用体验,提高系统可用性。

2、在我们的业务场景中是要求db中的数据能够快速修改达到最终一致,如果采取同步操作,在高并发的情况下,可能会出现如图1所示的执行时序:

3、可以发现,如果已这样的时序来进行操作,那么在高并发场景中,会有大量的t2线程执行失败,大大降低系统成功率,同时会严重影响用户体验。

4、如果这里采用异步汇总入账的方法,将每次的需要执行的实时update操作,变成insert操作,然后另起线程,将insert语句进行汇总执行,这种即现在很多银行、支付公司仍然在使用的t+1结算方式,将热点账户业务操作进行拆分,然后异步汇总操作。这种操作对于收单类业务(账户加钱)非常实用。

5、由同步操作变为异步操作,这里又会出现两个新的问题:

6、1、交易不能实时入账;

7、2、对支出类业务,有账户透支风险。

8、为了解决上面的问题,通过将针对汇总明细记账和内存数据库+缓存入账的基础上进行改良来满足业务需求。

9、综上所述,本专利技术设计了一种基于分布式缓存的异步热点账户处理的方法。


技术实现思路

1、针对现有技术上存在的不足,本专利技术目的是在于提供一种基于分布式缓存的异步热点账户处理的方法,是采用异步的方式基于分布式缓存来达到账户余额一致性方法,主要考虑应对高流量、高tps的场景,保障用户的使用体验、以及杜绝金额错误产生。

2、为了实现上述目的,本专利技术是通过如下的技术方案来实现:一种基于分布式缓存的异步热点账户处理的方法,包括以下步骤:

3、1、当账户金额充值新增时

4、记录redis操作记录hot_account,当账户入账时,插入或更新缓存数据,操作指令:zincrby key increment member,当key不存在,或member不是key成员时,zincrby keyincrement member等同于zadd key increment member。新增一条记录到流水表,设置入账状态为未入账;

5、2、当账户金额扣减时

6、同金额充值相同,首先记录redis操作记录hot_account,然后对缓存余额hot_acct_balance对应的金额进行扣减;

7、3、余额更新定时任务

8、将流水表数据更新到真实账户表和流水明细表,并且设置流水表中的数据为已入账,同时将新入账数据流水更新到缓存余额中的可用账户余额,让扣减操作得以继续运行。

9、4、热点账户生命周期

10、大多数场景中,一个热点账户并不会一直是热点,这时候可以设计一套机制来自动维护热点账户淘汰,不再是热点的账户操作,将会走常规账户操作流程,以减少系统资源的浪费。

11、基于使用频繁复杂度的热点账户淘汰策略,近期使用次数越少,越表明使用机率降低,可以不再当作热点账户进行后续操作,走正常账务流程。

12、所述的步骤1的缓存操作:key可以为热点账户账户号相关:hot_account,主要结构为当前账户操作时间(新覆盖旧),出入账账户id。所有账户的入账和出账操作需要记录道hot_account中,主要是提供给定时任务获取所有账户流水id。

13、所述的步骤2中的缓存余额:key为hot_acct_balance,主要结构为账户当前可用余额,账户id。热点账户新操作流程之前需要将数据库中热点账户数据同步到【缓存余额】中。

14、一张流水表,用来记录入账或出账流水。

15、本专利技术的有益效果:采用异步的方式基于分布式缓存来达到账户余额一致性方法,主要考虑应对高流量、高tps的场景,保障用户的使用体验、以及杜绝金额错误产生。

本文档来自技高网...

【技术保护点】

1.一种基于分布式缓存的异步热点账户处理的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种基于分布式缓存的异步热点账户处理的方法,其特征在于,所述的步骤(1)的缓存操作:key可以为热点账户账户号相关:hot_account,主要结构为当前账户操作时间(新覆盖旧),出入账账户ID;所有账户的入账和出账操作需要记录道hot_account中,主要是提供给定时任务获取所有账户流水ID。

3.根据权利要求1所述的一种基于分布式缓存的异步热点账户处理的方法,其特征在于,所述的步骤(2)中的缓存余额:key为hot_acct_balance,主要结构为账户当前可用余额,账户ID;热点账户新操作流程之前需要将数据库中热点账户数据同步到缓存余额中;

【技术特征摘要】

1.一种基于分布式缓存的异步热点账户处理的方法,其特征在于,包括以下步骤:

2.根据权利要求1所述的一种基于分布式缓存的异步热点账户处理的方法,其特征在于,所述的步骤(1)的缓存操作:key可以为热点账户账户号相关:hot_account,主要结构为当前账户操作时间(新覆盖旧),出入账账户id;所有账户的入账和出账操作需要记录...

【专利技术属性】
技术研发人员:杜博魏培
申请(专利权)人:天翼电子商务有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1