轻量级分布式ID生成方法方法及系统与流程

专利2026-05-08  9


本发明涉及计算机,更具体的说,本发明涉及一种轻量级分布式id生成方法及系统。


背景技术:

1、随着业务数据规模的增长,传统的单表数据库架构开始遇到性能瓶颈。在这种情况下,原有的依赖于mysql表自增字段的id生成机制在分库分表的环境下显得不再适用。这是因为分库分表要求数据能够在多个数据库实例间分散存储,而mysql的自增字段在跨数据库实例时无法保证唯一性。因此,开发一种新的、适用于分布式环境的id生成和管理机制变得尤为重要。

2、传统的id生成方法,例如uuid和雪花算法,虽然能够确保每个id的唯一性,但它们存在一些局限性。uuid由于其固定的128位长度,生成的id较为冗长,不仅占用更多的存储空间,而且在分布式数据库中进行查询和排序时效率较低。雪花算法虽然可以通过调整参数来优化id的长度,但它依赖于系统时钟来保证序列号的递增,一旦系统时钟发生回拨,就可能导致id的重复生成。

3、为了解决上述问题,分布式自增id生成算法应运而生。这种算法的核心思想是在分布式系统的每个节点上都维护一个唯一的节点id和一个自增的序列号。通过这种方式,每个节点都能够独立生成全局唯一的id,而不需要依赖中心化的id生成服务。然而,分布式系统环境下的节点故障或离线是不可避免的,这可能会导致序列号的递增中断,从而影响到整个系统的稳定性和可靠性。

4、因此亟需提供一种克服上述局限性的轻量级分布式id生成方法及系统。


技术实现思路

1、本发明提供一种轻量级分布式id生成方法及系统,以至少解决现有分布式id生成方法效率低,稳定性及可靠性差的问题。本发明结合redis、mysql在分布id生成与管理上进行了轻量化改造,保障id的有序生成,同时保证其唯一性、性能、鲁棒性能得到满足。

2、为达上述目的,本发明提供一种轻量级分布式id生成方法,包括以下步骤:

3、初始化步骤:在redis数据库及redis缓存库中分别建立id模型字段,在所述redis数据库中预设初始化值及步进值;

4、缓存开关判定步骤:接收id生成请求,对缓存开关状态进行判定,若判定缓存开关为关闭状态,则进入数据库累加模式;若判定缓存开关为开启状态,则切换至缓存累加模式;

5、redis原子自增步骤:在缓存累加模式下,执行redis原子自增操作,若所述redis原子自增操作成功,则进入步进值判定步骤;若所述redis原子自增操作失败,则切换至数据库累加模式;

6、步进值判定步骤:检查执行redis原子自增操作后生成的id值是否触达预设步进值,若未触达所述预设步进值,则输出id值;若触达预设步进值,则执行数据库更新步骤;

7、数据库更新步骤:id值触达预设步进值时与redis数据库进行交互,更新初始化值及重置缓存库中的id值,输出id值。

8、进一步地,所述数据库更新步骤具体包括:redis原子自增操作后生成的id值触达所述预设步进值,则与所述redis数据库进行交互,所述redis数据库中的所述初始化值增加一个步进值的量,所述redis缓存库中的id值重置为所述步进值之后的起始值,输出id值。

9、进一步地,所述数据库累加模式包括:

10、初始化值更新步骤:基于所述步进值和切换至数据库累加模式前的初始化值进行累计,得到新的初始化值;

11、id生成步骤:基于更新后的初始化值,自增生成新的id值。

12、进一步地,还包括一异常状态判定步骤:若判定redis处于异常状态,则切换至数据库累加模式。

13、进一步地,所述redis数据库中建立的id模型字段包括:主键、id类型、初始化值、步进值及id值;所述redis缓存库中建立的id模型字段包括:id类型及id值。

14、进一步地,所述初始化步骤还包括:在系统启动及redis故障恢复时,从redis数据库中读取所述id模型字段的当前状态,以确定初始化值和步进值;如果redis数据库中不存在id模型字段,则根据预设的初始化值和步进值进行初始化。

15、进一步地,本发明提供一种轻量级分布式id生成方法的系统,应用上述轻量级分布式id生成方法,包括:

16、初始化模块:用于在redis数据库及redis缓存库中分别建立id模型字段,在所述redis数据库中预设初始化值及步进值;

17、缓存开关判定模块:用于接收id生成请求,对缓存开关状态进行判定,若判定缓存开关为关闭状态,则切换至数据库累加模式;若判定缓存开关为开启状态,则切换至缓存累加模式;

18、redis原子自增模块:用于在缓存累加模式下,执行redis原子自增操作,若所述redis原子自增操作成功,则进入步进值判定步骤;若所述redis原子自增操作失败,则进入数据库累加模式;

19、步进值判定模块:用于检查执行redis原子自增操作后生成的id值是否触达预设步进值,若未触达所述预设步进值,则输出id值;若触达预设步进值,则执行数据库更新步骤;

20、数据库更新模块:用于在id值触达预设步进值时与redis数据库进行交互,更新初始化值及重置缓存库中的id值。

21、进一步地,所述轻量级分布式id生成系统进一步包括异常状态判定模块:用于监测redis的状态,若检测到异常状态,则切换至数据库累加模式。

22、进一步地,本发明提供一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上述轻量级分布式id生成方法。

23、进一步地,本发明提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如上述轻量级分布式id生成方法。

24、与现有技术相比,本发明的优点和积极效果在于:本发明提供一种轻量级分布式id生成方法,通过数据库和缓存库的结合使用,利用数据库的持久化特性确保id生成的稳定性,同时使用缓存的高速访问特性来提升性能。通过在缓存系统中实现原子自增操作,本发明能够在高并发环境下保证id的有序生成,避免了并发访问时可能出现的id冲突。引入步进值作为控制参数,当缓存中的id值达到这个预设的步进值时,系统会自动与数据库同步,更新id的当前值,从而解决了在节点故障或其他异常情况下的数据一致性问题。此外,通过设计灵活的id模型,本发明能够根据不同的业务场景生成不同类型的id,实现了id类型的横向扩展,以支持多样化的业务需求。

25、本发明可实现如下技术效果:

26、轻量级算法实现:本发明提供的算法不需要额外的分布式id组件,从而减轻了系统的负担,同时保证了核心系统的稳定性和性能。

27、高效的id生成:在分库分表的复杂场景下,本算法依然能够保证id的有序、唯一和高性能生成,满足了分布式系统对id生成的严格要求。

28、多场景支持:通过id类型的横向扩展,本发明能够快速适应并支持多种不同的业务场景,生成相应类型的id,提高了系统的灵活性和适用范围。

29、系统鲁棒性增强:即使在面对节点故障或网络分区等异常情况时,本发明的算法也能够确保id生成的连续性和一致性,增强了系统的鲁棒性。

30、易于维护和扩展:由于算法的模块化设计,使得系统维护和功能扩展变得更加容易,可以根据未来的业务发展和技术变化进行相应的调整和升级。


技术特征:

1.一种轻量级分布式id生成方法,其特征在于,包括以下步骤:

2.根据权利要求1所述轻量级分布式id生成方法,其特征在于,所述数据库更新步骤具体包括:redis原子自增操作后生成的id值触达所述预设步进值,则与所述redis数据库进行交互,所述redis数据库中的所述初始化值增加一个步进值的量,所述redis缓存库中的id值重置为所述步进值之后的起始值,输出id值。

3.根据权利要求2所述轻量级分布式id生成方法,其特征在于,所述数据库累加模式包括:

4.根据权利要求1所述轻量级分布式id生成方法,其特征在于,还包括一异常状态判定步骤:若判定redis处于异常状态,则切换至数据库累加模式。

5.根据权利要求1所述轻量级分布式id生成方法,其特征在于,所述redis数据库中建立的id模型字段包括:主键、id类型、初始化值、步进值及id值;所述redis缓存库中建立的id模型字段包括:id类型及id值。

6.根据权利要求1所述的轻量级分布式id生成方法,其特征在于,所述初始化步骤还包括:在系统启动及redis故障恢复时,从redis数据库中读取所述id模型字段的当前状态,以确定初始化值和步进值;如果redis数据库中不存在id模型字段,则根据预设的初始化值和步进值进行初始化。

7.一种轻量级分布式id生成系统,应用上述1-6中任一权利要求所述轻量级分布式id生成方法,包括:

8.根据权利要求7所述的轻量级分布式id生成系统,其特征在于,所述轻量级分布式id生成系统进一步包括异常状态判定模块:用于监测redis的状态,若检测到异常状态,则切换至数据库累加模式。

9.一种电子设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至6中任一项所述轻量级分布式id生成方法。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至6中任一项所述轻量级分布式id生成方法。


技术总结
本发明提供一种轻量级分布式ID生成方法,包括以下步骤:在Redis数据库及Redis缓存库中分别建立ID模型字段,在Redis数据库中预设初始化值及步进值;接收ID生成请求,对缓存开关状态进行判定,若判定缓存开关为关闭状态,则进入数据库累加模式;若判定缓存开关为开启状态,则切换至缓存累加模式;在缓存累加模式下,执行Redis原子自增操作,若Redis原子自增操作成功,则进入步进值判定步骤;若Redis原子自增操作失败,则切换至数据库累加模式;检查执行Redis原子自增操作后生成的ID值是否触达预设步进值,若未触达预设步进值,则输出ID值;若触达预设步进值,则执行数据库更新步骤;ID值触达预设步进值时与Redis数据库进行交互,更新初始化值及重置缓存库中的ID值。

技术研发人员:刘鹰子
受保护的技术使用者:海尔消费金融有限公司
技术研发日:
技术公布日:2024/7/25
转载请注明原文地址: https://bbs.8miu.com/read-440069.html

最新回复(0)