一种基于redis的热点账户高并发支付处理方法、介质及设备技术

技术编号:39282594 阅读:22 留言:0更新日期:2023-11-07 10:55
本发明专利技术涉及基于redis的热点账户高并发支付处理方法、介质及设备,新增流水缓存集合以及余额缓存集合,流水缓存集合记录账户ID以及账户ID对应的出账入账操作数据,余额缓存集合记录账户ID以及账户可用余额,通过实时更新流水缓存集合中的出账入账操作数据以及更新余额缓存集合中的账户可用余额,利用延迟入账流水表对业务数据表以及业务账户余额进行异步更新,在账户可用余额因出账操作超出预设可用范围时,实时对出账操作进行反馈以及扣减撤回操作,避免后续异步更新时存在余额透支、在redis缓存中出现余额为负数的问题,充分利用Redis高性能优势,实现缓存处理流程与数据一致性的平衡,大幅提升了业务系统的高并发处理能力,适应行业交易需求。适应行业交易需求。适应行业交易需求。

【技术实现步骤摘要】
一种基于redis的热点账户高并发支付处理方法、介质及设备


[0001]本专利技术涉及计算机信息处理
,具体涉及一种基于redis的热点账户高并发支付处理方法、介质及设备。

技术介绍

[0002]在旅游行业的在线交易中,商家和代理商之间大量使用授信账户进行资金结算。这类授信账户存在大量的并发支付交易,对系统的并发处理能力提出了很高的要求。现有的账户管理方案主要有以下两种:
[0003](1)基于数据库的账户管理方案,在这种方案中,方案是将实时同步的记账请求进行异步化,以达到记账实时性和系统稳定性之间平衡的记账手段,具体操作为当操作超过热点账户承载量时,系统先返回结果再异步把账务处理丢到可靠的处理队列中,等并发量不大的时候慢慢消化,对用户来说感受到的体验还是很快就记账成功了。但是在应用过程中,方案(1)存在以下问题:汇总明细入账方案对账户的出入账操作先以流水的形式记录下来,然后再通过分布式定时任务调度来将出入账流水更新到业务表中。这种做法对于频繁的入账来说性能提高明显,但是因为没有对总金额进行校验,对支出类业务类来说,有账户透支地风险。并且对于金额的校验需要通过流水数据和当前可用余额来判定,有并发问题,计算很难准确。
[0004](2)基于缓存的账户管理方案,这一方案中为了提高系统并发能力,有方案引入缓存层,基于Redis实时地处理记账,异步缓冲入库方案是采用redis这种内存数据库实时地处理记账请求,然后异步地存储到可靠数据库上。此方案使用redis做数据前置处理,将数据库中的热点账户金额初始同步到redis中,然后将操作记录流水,再通过分布式定时任务调度刷新流水到业务表。这样将业务数据库和缓存分开极大的加大了并发性能。但是在应用过程中,方案(2)存在以下问题:基于Redis实时地处理记账,异步缓冲入库方案虽然极大的加大了并发性能,但在极端场景下会存在并发问题,假设在redis初始的账户余额为100,当线程1对账户金额进行原子减操作时,剩余金额40,并记录流水表等待异步入账。当线程2对账户金额进行原子减操作时,剩余金额

20,此时金额已经为负,按照业务要求金额不能为负所以必须要做反向操作。当线程2还没有对余额进行反向操作维护的时候又出现线程3进行充值操作,此时金额又变成

20+100=80,已经出现金额混乱,所以对redis中缓存的金额进行同时冲扣会带来余额的并发问题。

技术实现思路

[0005]鉴于上述问题,本专利技术提供了一种基于redis的热点账户高并发支付处理方法、介质及设备,解决了现有的数据处理方案存在异步更新导致的账户余额透支以及金额扣减混乱的问题。
[0006]为实现上述目的,在第一方面,本专利技术提供一种基于redis的热点账户高并发支付处理方法,包括:
[0007]新增流水缓存集合以及余额缓存集合,将账户ID的出账入账操作数据记录至流水缓存集合中,余额缓存集合内存储有账户ID的账户可用余额,根据出账入账操作数据实时更新当前账户的账户可用余额,账户ID为热点账户ID;
[0008]当出账入账操作数据为出账操作时,对当前账户ID对应的账户可用余额进行扣减,并判断扣减后的当前账户ID对应的账户可用余额是否置于预设可用范围内,若否,则提示账户ID当前的出账操作失败,撤回当前出账操作对应的账户可用余额更新操作,并在流水缓存集合中删除出账操作;
[0009]新增延迟入账流水表,接入流水缓存集合,根据出账入账操作数据生成多个账户ID对应的出账入账流水,并写入延迟入账流水表中;
[0010]将多个账户ID的出账入账流水异步更新至账户ID对应的业务数据表,并在业务数据表完成更新时同步更新当前账户ID的业务账户余额,业务账户余额为当前账户ID的实际可用余额,业务数据表记录有当前账户ID所对应的出账入账的具体业务数据。
[0011]在一些实施例中,方法还包括:
[0012]在当前账户ID对应的业务账户余额更新完毕后,删除流水缓存集合中当前账户ID所对应的出账入账操作数据。
[0013]在一些实施例中,流水缓存集合包括多个相互关联的出账入账时间戳以及账户ID,多个账户ID在流水缓存集合内的排列顺序根据每一账户ID对应的最新的出账入账时间戳的顺序确定。
[0014]在一些实施例中,将账户ID的出账入账操作数据记录至流水缓存集合中还包括:
[0015]将待记录的出账入账操作数据写入对应账户ID中,写入待记录的出账入账操作数据时,同步获取出账入账操作数据对应的出账入账时间戳;
[0016]根据待记录的出账入账操作数据对应的出账入账时间戳更新账户ID在流水缓存集合中的排列顺序。
[0017]在一些实施例中,余额缓存集合包括多个相互关联的账户可用余额以及账户ID,所多个账户ID在余额缓存集合内的排列顺序根据每一账户ID对应的最新的账户可用余额确定。
[0018]在一些实施例中,根据出账入账操作数据实时更新当前账户的账户可用余额包括:
[0019]将当前账户ID的出账入账操作数据按照出账入账时间戳顺序排列;
[0020]按顺序提取出账入账操作数据,并对当前账户的账户可用余额进行更新,更新步骤包括:
[0021]判断所提取的出账入账操作数据所属类别,当出账入账操作数据为入账数据时,获取入账操作对应的入账数值并对应增加当前账户的账户可用余额并更新,当出账入账操作数据为出账数据时,获取出账操作对应的出账数值并对应当前账户的账户可用余额进行扣减,判断扣减后的账户可用余额是否置于预设可用范围内,若是,则对当前账户ID对应的账户可用余额进行更新。
[0022]在一些实施例中,根据出账入账操作数据实时更新当前账户的账户可用余额还包括:
[0023]当扣减后的当前账户ID对应的账户可用余额超出预设可用范围内时,将当前出账
操作记为第一出账入账操作数据,撤回第一出账入账操作数据对应的账户可用余额的更新操作,遍历当前账户ID对应的待更新的出账入账操作数据,判断是否存在入账操作,若是,将入账操作记为第二出账入账操作数据,根据第二出账入账操作数据更新账户可用余额,并在更新完毕后将其记为第二账户可用余额,根据第一出账入账操作数据更新第二账户可用余额,并将更新完毕后的第二账户可用余额记为第一账户可用余额。
[0024]在一些实施例中,还包括:
[0025]判断账户ID是否为新增账户,若是,则获取账户ID初始账户余额,并将初始账户余额作为账户可用余额更新至余额缓存集合中。
[0026]在第二方面,本专利技术还提供一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现在第一方面所述的方法。
[0027]在第三方面,本专利技术还提供一种电子设备,包括存储器和处理器,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现在第一方面所述的方法。
[0028]区别于现有技术,上述技术本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于redis的热点账户高并发支付处理方法,其特征在于,包括:新增流水缓存集合以及余额缓存集合,将账户ID的出账入账操作数据记录至所述流水缓存集合中,所述余额缓存集合内存储有账户ID的账户可用余额,根据所述出账入账操作数据实时更新当前账户的所述账户可用余额,所述账户ID为热点账户ID;当所述出账入账操作数据为出账操作时,对当前账户ID对应的所述账户可用余额进行扣减,并判断扣减后的当前账户ID对应的所述账户可用余额是否置于预设可用范围内,若否,则提示所述账户ID当前的出账操作失败,撤回当前出账操作对应的账户可用余额更新操作,并在所述流水缓存集合中删除所述出账操作;新增延迟入账流水表,接入所述流水缓存集合,根据所述出账入账操作数据生成多个账户ID对应的出账入账流水,并写入所述延迟入账流水表中;将多个账户ID的所述出账入账流水异步更新至账户ID对应的业务数据表,并在所述业务数据表完成更新时同步更新当前账户ID的业务账户余额,所述业务账户余额为当前账户ID的实际可用余额,所述业务数据表记录有当前账户ID所对应的出账入账的具体业务数据。2.根据权利要求1所述的基于redis的热点账户高并发支付处理方法,其特征在于,所述方法还包括:在当前账户ID对应的所述业务账户余额更新完毕后,删除所述流水缓存集合中当前账户ID所对应的出账入账操作数据。3.根据权利要求1所述的基于redis的热点账户高并发支付处理方法,其特征在于,所述流水缓存集合包括多个相互关联的出账入账时间戳以及账户ID,多个所述账户ID在所述流水缓存集合内的排列顺序根据每一账户ID对应的最新的出账入账时间戳的顺序确定。4.根据权利要求3所述的基于redis的热点账户高并发支付处理方法,其特征在于,将账户ID的出账入账操作数据记录至所述流水缓存集合中还包括:将待记录的出账入账操作数据写入对应账户ID中,写入待记录的出账入账操作数据时,同步获取所述出账入账操作数据对应的出账入账时间戳;根据所述待记录的出账入账操作数据对应的出账入账时间戳更新所述账户ID在所述流水缓存集合中的排列顺序。5.根据权利要求1所述的基于redis的热点账户高并发支付处理方法,其特征在于,所述余额缓存集合包括多个相互关联的账户可用余额以及账户ID,所多个所述账户ID在所述余额缓存集合内的排列顺序根据...

【专利技术属性】
技术研发人员:林忠兴陈平徐翔陈自武彭金兴
申请(专利权)人:福建九天达信息科技股份有限公司
类型:发明
国别省市:

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

1