掌桥专利:专业的专利平台
掌桥专利
首页

一种分布式并发场景下生成分级码的方法、设备及介质

文献发布时间:2023-06-19 18:37:28


一种分布式并发场景下生成分级码的方法、设备及介质

技术领域

本申请涉及软件系统并发处理技术领域,尤其涉及一种分布式并发场景下生成分级码的方法、设备及介质。

背景技术

在软件应用系统中,组织机构等常常采用分级信息来表达组织之间的结构层次。然而,传统模式下生成分级码信息时,每次都直接从数据库中取数,判断当前最新的分级码数据。这种模式下,每次数据库取数就会导致系统性能下降,系统反应迟钝,影响客户使用。

为了解决系统性能问题,在目前模式的基础上,加入了缓存机制,每次将分级码最大值信息缓存,下次优先从缓存中获取,解决了性能的问题,但是在并发场景下,多用户同时操作生成分级码时,就会导致同一层级出现分级路径信息重复的情况,导致数据重复,组织分级信息不对。随着业务规模的扩大,分布式系统的应用,并发场景下操作成为一个常规操作时,分级码的数据唯一性、系统功能的性能问题就显得尤为重要。

发明内容

本申请实施例提供了一种分布式并发场景下生成分级码的方法、设备及介质,通过分布式锁处理并发场景下的缓存数据一致性问题,以及通过分布式缓存解决系统功能的性能问题。

第一方面,本申请实施例提供了一种分布式并发场景下生成分级码的方法,所述方法包括:获取用户当前使用功能所对应的唯一标识,并基于所述唯一标识为用户创建分布式锁;对所述当前使用功能对应的分布式缓存进行初始化;确定所述分布式缓存中存在所述当前使用功能对应层的分级码最大值,并在所述分布式缓存中获取所述分级码最大值;对所述分级码最大值进行加一处理后,赋值给当前的分级码路径,以得到最新的分级码最大值;将所述最新的分级码最大值存储到分布式缓存中,并释放所述分布式锁。

在本申请说明书的一个或多个实施例中,对所述当前使用功能对应的分布式缓存进行初始化之后,所述方法还包括:确定所述分布式缓存中不存在所述当前使用功能对应层的分级码最大值;获取数据库中最新的分级码路径;对所述最新的分级码路径进行加一处理后,赋值给当前的分级码路径。

在本申请说明书的一个或多个实施例中,在基于所述唯一标识为用户创建分布式锁之前,所述方法还包括:对分布式锁的获取、分布式锁的过期时间以及分布式锁的释放时间进行定义。

在本申请说明书的一个或多个实施例中,所述分布式锁的获取定义为通过所述唯一标识获取所述当前使用功能的分布式锁;所述分布式锁的过期时间定义为在所述当前使用功能出错或者所述当前使用功能静置预设时间之后,确定所述分布式锁过期;所述分布式锁的释放时间定义为所述当前使用功能运行完毕后,对所述分布式锁进行释放。

在本申请说明书的一个或多个实施例中,在对所述当前使用功能对应的分布式缓存进行初始化之前,所述方法还包括:对分布式缓存的初始化、分布式缓存的缓存类型、分布式缓存的过期时间、分布式缓存的获取、分布式缓存的更新以及分布式缓存的删除进行定义。

在本申请说明书的一个或多个实施例中,所述分布式缓存的初始化定义为在为用户创建所述分布式锁后,初始化分布式缓存;所述分布式缓存的缓存类型定义为缓存数据时,使用Redis缓存或者使用内存缓存;所述分布式缓存的过期时间定义为缓存的分级码最大值在预设时间之后失效,需要重新缓存新的分级码最大值;分布式缓存的获取定义为在生成分级码路径时,首先从分布式缓存中获取分级码最大值;分布式缓存的更新定义为生成新的分级码路径后,将新的分级码最大值更新到分布式缓存中;分布式缓存的删除定义为在删除分级码相关数据时,当删除的相关数据为分级码最大值时,同时将分布式缓存中缓存的分级码最大值删除。

在本申请说明书的一个或多个实施例中,在获取用户当前使用功能所对应的唯一标识之前,所述方法还包括:对分级码的级数、路径以及是否明细进行定义。

在本申请说明书的一个或多个实施例中,所述分级码的级数定义为所述当前使用功能的分级信息对应层;所述分级码的路径定义为分级码的相关信息;所述分级码的是否明细定义为所述当前使用功能的分级信息否还有下级,其中,True表示有下级,False表示没有下级。

第二方面,本申请实施例还提供了一种分布式并发场景下生成分级码的设备,所述设备包括:处理器;以及,存储器,其上存储有可执行指令,当所述可执行指令被执行时,使得所述处理器执行如上述的一种分布式并发场景下生成分级码的方法。

第三方面,本申请实施例还提供了一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为执行如上述的一种分布式并发场景下生成分级码的方法。

本申请实施例提供的一种分布式并发场景下生成分级码的方法、设备及介质,具有以下有益效果:通过本申请实施例中的方法,在高并发场景下,利用分布式锁、分布式缓存的使用避免系统出现死锁的状况,同时减少了和数据库交互的次数,保证了功能分级码信息生成正确唯一,同时提升了系统的性能。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的一种分布式并发场景下生成分级码的方法流程图;

图2为本申请实施例提供的一种并发场景下,生成分级码的流程示意图;

图3为本申请实施例提供的一种分布式并发场景下生成分级码的设备结构图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面通过附图对本申请实施例提出的技术方案进行详细的说明。

图1为本申请实施例提供的一种分布式并发场景下生成分级码的方法流程图。如图1所示,本申请实施例中提供的生成分级码的方法,至少包括以下执行步骤:

步骤101、定义分布式锁。

本申请实施例提供的生成分级码的方法,是基于分布式锁与分布式缓存实现的,通过分布式锁处理并发场景下的缓存数据一致性的问题,通过分布式缓存解决系统功能的性能问题,提升系统功能反应时间,既能够保证生成的分级数据的唯一性,又能够保证系统的性能。

因此,在生成分级码之前,首先要进行分布式锁与分布式缓存的定义。

具体地,定义分布式锁,定义的内容包括分布式锁的获取、分布式锁的过期时间以及分布式锁的释放。其中,分布式锁的获取定义为通过分布式功能锁的唯一标识获取用户当前示使用功能的分布式锁。分布式锁的过期时间定义为设置分布式锁的过期时间,在当前使用功能的程序出错或者当前使用功能静置一段时间之后,将分布式锁释放,以节省系统资源。分布式锁的释放定义为当前使用功能的程序运行完之后,将分布式锁释放,避免占用系统资源。

步骤102、定义分布式缓存。

在完成分布式锁的定义之后,还需要进行分布式缓存的定义。

具体地,定义分布式缓存,定义的内容包括分布式缓存的初始化、分布式缓存的缓存类型、分布式缓存的过期时间、分布式缓存的获取、分布式缓存的更新以及分布式缓存的删除。其中,分布式缓存的初始化定义为在加分布式锁后,首先初始化分布式缓存,为接下来的缓存操作做准备。分布式缓存的缓存类型定义为缓存分级码相关数据时,使用Redis缓存或者内存缓存。分布式缓存的过期时间定义为缓存的分级码相关数据在一定时间(预设时间)之后失效,需要重新缓存新的分级码相关数据。分布式缓存的获取定义为在生成分级码路径时,首先从分布式缓存中获取分级码最大值。分布式缓存的更新定义为生成新的分级码路径或者分级码最大值后,将此时的分级码最大值更新到分布式缓存中,以便于下次使用直接从分布式缓存中获取。分布式缓存的删除定义为在删除分级码相关数据时,当删除的相关数据为分级码最大值时,同时将分布式缓存中缓存的分级码最大值删除,以保证数据库和分布式缓存中缓存的数据一致性。

步骤103、生成分级码数据。

在定义完分布式锁与分布式缓存之后,就可以进行分级码数据的生成过程了。具体地,在生成分级码数据之前,还要定义分级码的结构,分级码包括路径、级数以及是否明细。其中,路径表示的是分级码信息。级数表示的是用户当前使用功能对应的分级信息是哪一层的。是否明细表示当前分级信息是否还有下级,True是代表还有下级,False代表没有下级。

进一步地,生成分级码数据,主要包含以下阶段:

1)加分布式锁。通过获取当前使用功能的唯一标识创建分布式锁,并发场景下,多个用户执行操作时,哪个用户先获取到分布式锁,就先为哪个用户加锁,以保证数据的唯一性。

2)获取分布式缓存。初始化当前使用功能的分布式缓存,为后续缓存数据做准备,防止每次从数据库取数,导致功能性能下降。

3)生成分级码最新数据。判断分布式缓存中是否已经缓存了当前使用功能对应层的分级码最大值,如果有,从分布式缓存中获取分级码最大值,加一处理后赋值给当前的分级码路径;如果没有,从数据库获取最新的分级码路径,然后加一处理后,赋值给当前的分级码路径。

4)更新分布式缓存。分级码最大值生成以后,将分级码最大值缓存到分布式缓存中,防止每次都从数据库取数,提升系统的性能。

5)释放分布式锁。执行完分布式缓存的更新之后,将分布式锁进行释放,以防占用系统资源,造成系统堵塞。

为了更加清楚详细的描述本申请实施例提出的分级码的生成方法,本申请实施例在一种并发场景下,对分级码的生成方法,进行了更加详细的描述,如图2所示。

图2为本申请实施例提供的一种并发场景下,生成分级码的流程示意图。如图2所示,通过模拟ERP系统组织信息维护功能的新增分级码同级实现详细描述,使本申请的上述方案、特征和优点更加清晰、易懂。

1)准备两个ERP系统身份权限一样的用户:UserA、UserB。

2)用户UserA和用户UserB成功登录系统。

3)用户UserA和用户UserB某一时间同时进入组织信息维护界面,新增数据。

4)假设当前分级路径为00010001,新增数据之后的结果为:00010002,新增数据执行后台接口方法时,用户UserA和UserB首先进行获取分布式锁的获取,谁优先获取,谁进行下一步的操作。假设用户UserA竞争获取到了分布式锁,进行分布式缓存初始化,如果分布式缓存中有分级码最大值,就生成分级码路径为分级码最大值加一,然后更新至分布式缓存中,执行完成后释放分布式锁,在这个过程中用户UserB等待,直至UserA执行完释放锁,或者出现异常释放锁,或者锁已经失效。

5)如果用户UserA新增成功,得到的数据为00010002;接着用户UserB执行操作,用户UserB执行成功,得到的数据为00010003。

6)如果用户UserA中间失败,异常释放分布式锁,用户UserB执行操作,用户UserB执行成功,得到的数据为00010002。

以上为本申请实施例中的方法实施例,基于同样的发明构思,本申请实施例还提供了一种分布式并发场景下生成分级码的设备,其结构如图3所示。

图3为本申请实施例提供的一种分布式并发场景下生成分级码的设备结构图。如图3所示,设备包括:处理器;以及,存储器,其上存储有可执行指令,当所述可执行指令被执行时,使得所述处理器执行如上述的一种分布式并发场景下生成分级码的方法。

在本申请实施例的一种或多种可能实现方式中,处理器用于,获取用户当前使用功能所对应的唯一标识,并基于所述唯一标识为用户创建分布式锁;对所述当前使用功能对应的分布式缓存进行初始化;确定所述分布式缓存中存在所述当前使用功能对应层的分级码最大值,并在所述分布式缓存中获取所述分级码最大值;对所述分级码最大值进行加一处理后,赋值给当前的分级码路径,以得到最新的分级码最大值;将所述最新的分级码最大值存储到分布式缓存中,并释放所述分布式锁。

另外,本申请实施例还提供了一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:获取用户当前使用功能所对应的唯一标识,并基于所述唯一标识为用户创建分布式锁;对所述当前使用功能对应的分布式缓存进行初始化;确定所述分布式缓存中存在所述当前使用功能对应层的分级码最大值,并在所述分布式缓存中获取所述分级码最大值;对所述分级码最大值进行加一处理后,赋值给当前的分级码路径,以得到最新的分级码最大值;将所述最新的分级码最大值存储到分布式缓存中,并释放所述分布式锁。

本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备、介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

技术分类

06120115632053