System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 分布式ID生成方法、装置、电子设备及存储介质制造方法及图纸_技高网

分布式ID生成方法、装置、电子设备及存储介质制造方法及图纸

技术编号:40247574 阅读:7 留言:0更新日期:2024-02-02 22:43
本申请公开了一种分布式ID生成方法、装置、电子设备及存储介质,该方法包括步骤:获取当前时间戳和上一次生成的历史ID对应的历史时间戳;若所述当前时间戳小于所述历史时间戳,则获取新的机器号;基于所述新的机器号生成新的ID。本申请通过新的机器号生成新的ID,而不继续采用历史ID中的历史机器号来生成新的ID,使得即使时钟回拨导致时间戳位发生重复,也可以通过不同的机器号来保证生成的ID不重复。

【技术实现步骤摘要】

本申请涉及分布式系统,尤其涉及一种分布式id生成方法、装置、电子设备及存储介质。


技术介绍

1、在分布式系统中,需要对数据、消息、http请求等进行唯一标识,要求产生全局唯一且单调递增的id(identity,唯一编码)。

2、目前,常见的方案有uuid(universally unique identifier,通用唯一识别码)、flicker方案、snowflake算法等。通过snowflake算法生成新的id时,该id包括long和string两种类型,其中,long类型的由64位二进制bit组成,该64位一般包括1bit的符号位、41bit的时间戳位、10bit的机器号位和12bit的序列号位。在用于发号(在生成新的id后)的服务器发生时钟回拨时,41bit的时间戳位会出现重复的情况,导致最终生成的id重复。

3、因此,实际应用中需要一种能够避免分布式系统中id重复的方案。


技术实现思路

1、本申请的主要目的在于提供一种分布式id生成方法、装置、电子设备及存储介质,旨在解决使用snowflake算法生成新的id并出现时钟回拨时,id重复的技术问题。

2、为实现上述目的,本申请提供一种分布式id生成方法,所述分布式id生成方法包括以下步骤:

3、获取当前时间戳和上一次生成的历史id对应的历史时间戳;

4、若所述当前时间戳小于所述历史时间戳,则获取新的机器号;

5、基于所述新的机器号生成新的id。

<p>6、示例性的,所述获取新的机器号,包括:

7、从数据库的机器号列表中获取所有可复用的机器号对应的续期时间;

8、对所有所述续期时间进行先后顺序排序;

9、若排序最前的所述续期时间与当前时间之差大于两个心跳周期,则确定所述排序最前的所述续期时间对应的可复用的机器号为新的机器号。

10、示例性的,所述从数据库的机器号列表中获取所有可复用的机器号对应的续期时间之前,包括:

11、获取当前实例的标识;

12、基于所述标识,从数据库的机器号列表中匹配得到对应的目标机器号;

13、修改所述目标机器号对应的复用状态为false,表征所述目标机器号为可复用的机器号。

14、示例性的,所述获取当前实例的标识之前,包括:

15、检查缓存中是否存在所述目标机器号;

16、若未存在,则执行所述获取当前实例的标识步骤。

17、示例性的,所述对所有所述续期时间进行先后顺序排序之后,还包括:

18、若排序最前的所述续期时间与当前时间之差小于两个心跳周期,则获取所述机器号列表中数值最大的机器号;

19、对所述数值最大的机器号增加一个单位数值,获得所述新的机器号。

20、示例性的,所述方法还包括:

21、创建定时任务;所述定时任务用于维护数据库的机器号列表中的机器号。

22、示例性的,所述新的id包括预留位,所述预留位用于对机器号位和/或时间戳位进行扩展。

23、示例性的,为实现上述目的,本申请还提供一种分布式id生成装置,所述分布式id生成装置包括:

24、第一获取模块,用于获取当前时间戳和上一次生成的历史id对应的历史时间戳;

25、第二获取模块,用于若所述当前时间戳小于所述历史时间戳,则获取新的机器号;

26、生成模块,用于基于所述新的机器号生成新的id。

27、示例性的,所述第二获取模块包括:

28、第一获取单元,用于从数据库的机器号列表中获取所有可复用的机器号对应的续期时间;

29、排序单元,用于对所有所述续期时间进行先后顺序排序;

30、确定单元,用于若排序最前的所述续期时间与当前时间之差大于两个心跳周期,则确定所述排序最前的所述续期时间对应的可复用的机器号为新的机器号。

31、示例性的,所述第二获取模块还包括:

32、第二获取单元,用于获取当前实例的标识;

33、匹配单元,用于基于所述标识,从数据库的机器号列表中匹配得到对应的目标机器号;

34、修改模块,用于修改所述目标机器号对应的复用状态为false,表征所述目标机器号为可复用的机器号。

35、示例性的,所述分布式id生成装置还包括:

36、检查模块,用于检查缓存中是否存在所述目标机器号;

37、执行模块,用于若未存在,则执行所述获取当前实例的标识步骤。

38、示例性的,所述第二获取模块还包括:

39、第三获取单元,用于若排序最前的所述续期时间与当前时间之差小于两个心跳周期,则获取所述机器号列表中数值最大的机器号;

40、数值增加单元,用于对所述数值最大的机器号增加一个单位数值,获得所述新的机器号。

41、示例性的,所述分布式id生成装置还包括:

42、创建模块,用于创建定时任务;所述定时任务用于维护数据库的机器号列表中的机器号。

43、示例性的,所述新的id包括预留位,所述预留位用于对机器号位和/或时间戳位进行扩展。

44、示例性的,为实现上述目的,本申请还提供一种电子设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的分布式id生成程序,所述分布式id生成程序配置为实现如上所述的分布式id生成方法的步骤。

45、示例性的,为实现上述目的,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有分布式id生成程序,所述分布式id生成程序被处理器执行时实现如上所述的分布式id生成方法的步骤。

46、与相关技术中在用于发号(生成新的id)的服务器发生时钟回拨时,41bit时间戳位会出现重复的情况,导致最终生成的id重复相比,本申请实施例获取当前时间戳和上一次生成的历史id对应的历史时间戳;若所述当前时间戳小于所述历史时间戳,则获取新的机器号;基于所述新的机器号生成新的id。本申请通过新的机器号生成新的id,而不继续采用历史id中的历史机器号来生成新的id,使得即使时钟回拨导致时间戳位发生重复,也可以通过不同的机器号来保证生成的id不重复。

本文档来自技高网
...

【技术保护点】

1.一种分布式ID生成方法,其特征在于,所述分布式ID生成方法包括以下步骤:

2.如权利要求1所述的分布式ID生成方法,其特征在于,所述获取新的机器号,包括:

3.如权利要求1或2所述的分布式ID生成方法,其特征在于,所述从数据库的机器号列表中获取所有可复用的机器号对应的续期时间之前,包括:

4.如权利要求3所述的分布式ID生成方法,其特征在于,所述获取当前实例的标识之前,包括:

5.如权利要求2所述的分布式ID生成方法,其特征在于,所述对所有所述续期时间进行先后顺序排序之后,还包括:

6.如权利要求1所述的分布式ID生成方法,其特征在于,所述方法还包括:

7.如权利要求1所述的分布式ID生成方法,其特征在于,所述新的ID包括预留位,所述预留位用于对机器号位和/或时间戳位进行扩展。

8.一种分布式ID生成装置,其特征在于,所述分布式ID生成装置包括:

9.一种电子设备,其特征在于,所述电子设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的分布式ID生成程序,所述分布式ID生成程序配置为实现如权利要求1至7中任一项所述的分布式ID生成方法的步骤。

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

...

【技术特征摘要】

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

2.如权利要求1所述的分布式id生成方法,其特征在于,所述获取新的机器号,包括:

3.如权利要求1或2所述的分布式id生成方法,其特征在于,所述从数据库的机器号列表中获取所有可复用的机器号对应的续期时间之前,包括:

4.如权利要求3所述的分布式id生成方法,其特征在于,所述获取当前实例的标识之前,包括:

5.如权利要求2所述的分布式id生成方法,其特征在于,所述对所有所述续期时间进行先后顺序排序之后,还包括:

6.如权利要求1所述的分布式id生成方法,其特征在于,所述方法还包括:

7...

【专利技术属性】
技术研发人员:吴永能张志强李玉峰金海成
申请(专利权)人:招商银行股份有限公司
类型:发明
国别省市:

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

1