本公开涉及数据处理,尤其涉及一种流水号生成方法、电子设备及存储介质。
背景技术:
1、在很多应用程序的使用场景中需要生成流水号,例如,有业务发生时,需要生成流水号来唯一表示该业务。
2、一般流水号的生成与时间戳有关,因流水号位数有限,每秒钟生成流水号数量有限,在当前时间范围内生成的流水号量达到最大量,当如果还要继续生成流水号,得等待下一个时间范围才能生成,无法保障流水号生成的连续性。
技术实现思路
1、本公开实施例所要解决的一个技术问题是:提供一种流水号生成方法、电子设备及存储介质。
2、根据本公开实施例的一个方面,提供一种流水号生成方法,包括:
3、响应于接收到业务方需要生成流水号的消息,从应用数据库中获取第二时间戳和第三时间戳,所述消息中携带有所述业务方的标识信息;
4、响应于第一时间戳、所述第二时间戳和所述第三时间戳满足第一设定条件,对上一个流水号的时钟回拨标识位执行自增一的操作,得到待生成流水号的时钟回拨标识位;
5、基于所述第一时间戳和所述第二时间戳,确定所述待生成流水号的时间戳初始值;
6、比较所述上一个流水号的序列号与序列号阈值;
7、响应于所述上一个流水号的序列号等于序列号阈值,将所述待生成流水号的序列号设置为序列号初始值,并且对所述时间戳初始值执行自增一的操作,得到所述待生成流水号的占位时间戳;
8、基于所述待生成水流号的生成信息,生成所述待生成水流号,所述待生成水流号的生成信息包括所述待生成水流号的时钟回拨标识位、所述待生成流水号的占位时间戳和待生成流水号的序列号;
9、其中,所述第一时间戳为当前系统时间戳,所述第二时间戳为上一个流水号的占位时间戳,所述第三时间戳为生成上一个流水号时的系统时间戳,所述第一设定条件为所述第一时间戳小于所述第三时间戳,并且所述第二时间戳和所述第三时间戳相等。
10、在本公开的一些实施例中,所述比较所述上一个流水号的序列号与序列号阈值之后,所述方法还包括:
11、响应于所述上一个流水号的序列号小于序列号阈值,对所述上一个流水号的序列号执行自增一的操作,得到所述待生成流水号的序列号,并且将所述时间戳初始值作为所述待生成流水号的占位时间戳。
12、在本公开的一些实施例中,所述基于所述第一时间戳和所述第二时间戳,确定所述待生成流水号的时间戳初始值,包括:
13、响应于所述第一时间戳不小于所述第二时间戳,将所述待生成流水号的时间戳初始值设置为所述第一时间戳;
14、响应于所述第一时间戳小于所述第二时间戳,将所述待生成流水号的时间戳初始值设置为所述第二时间戳。
15、在本公开的一些实施例中,所述生成所述待生成水流号之后,方法还包括:
16、将所述待生成流水号的生成信息以及生成所述待生成流水号时的系统时间戳存储在应用数据库中。在本公开的一些实施例中,所述方法还包括:
17、响应于所述第一时间戳、第二时间戳和第三时间戳不满足所述第一设定条件,将所述上一个流水号的时钟回拨标识位确定为所述待生成流水号的时钟回拨标识位。
18、在本公开的一些实施例中,所述待生成水流号的生成信息还包括符号位、版本号和应用实例编号中的至少一项;
19、所述方法还包括:通过编号服务器生成所述应用实例编号;
20、从应用数据库中获取所述版本号和所述符号位。
21、在本公开的一些实施例中,所述通过编号服务器生成所述应用实例编号,包括:
22、向所述编号服务器发送编号请求,所述编号请求中携带有应用名称、主机名称以及局域网地址;
23、接收所述编号服务器返回的应用实例编号。
24、在本公开的一些实施例中,所述应用实例编号通过以下步骤生成:
25、所述编号服务器获取发送所述编号请求的网络地址;
26、根据所述网络地址,以所述应用名称为主键请求分布式锁;
27、响应于没有成功请求到所述分布式锁,在设定时间间隔后执行所述以所述应用名称为主键请求分布式锁的操作;
28、响应于成功请求到所述分布式锁,根据所述应用名称在编号数据库中查询应用实例编号;
29、响应于根据所述应用名称所查询到的应用实例编号的最大值等于编号阈值,将所述应用实例编号的初始值设置为用于返回的应用实例编号;
30、响应于根据所述应用名称没有成功查询到应用实例编号,将应用实例编号的初始值设置为用于返回的应用实例编号;
31、响应于根据所述应用名称查询到的应用实例编号小于所述编号阈值,对所查询到的最大的应用实例编号执行加一操作,得到用于返回的应用实例编号。
32、根据本公开实施例的又一方面,提供一种流水号生成装置,应用于业务方触发了生成流水号的场景,所述装置包括:
33、第一获取模块,用于响应于接收到业务方需要生成流水号的消息,从应用数据库中获取第二时间戳和第三时间戳,所述消息中携带有所述业务方的标识信息;
34、第一处理模块,用于响应于第一时间戳、所述第二时间戳和所述第三时间戳满足第一设定条件,对上一个流水号的时钟回拨标识位执行自增一的操作,得到待生成流水号的时钟回拨标识位;
35、第一设置模块,用于基于所述第一时间戳和所述第二时间戳,确定所述待生成流水号的时间戳初始值;
36、比较模块,用于比较所述上一个流水号的序列号与序列号阈值;
37、第二设置模块,用于响应于所述上一个流水号的序列号等于序列号阈值,将所述待生成流水号的序列号设置为序列号初始值,并且对所述时间戳初始值执行自增一的操作,得到所述待生成流水号的占位时间戳;
38、生成模块,用于基于所述待生成水流号的生成信息,生成所述待生成水流号,所述待生成水流号的生成信息包括所述待生成水流号的时钟回拨标识位、所述待生成流水号的占位时间戳和待生成流水号的序列号;
39、其中,所述第一时间戳为当前系统时间戳,所述第二时间戳为上一个流水号的占位时间戳,所述第三时间戳为生成上一个流水号时的系统时间戳,所述第一设定条件为所述第一时间戳小于所述第三时间戳,并且所述第二时间戳和所述第三时间戳相等。
40、在本公开的一些实施例中,所述比较所述上一个流水号的序列号与序列号阈值之后,所述装置还包括:
41、第二处理模块,用于响应于所述上一个流水号的序列号小于序列号阈值,对所述上一个流水号的序列号执行自增一的操作,得到所述待生成流水号的序列号,并且将所述时间戳初始值作为所述待生成流水号的占位时间戳。
42、在本公开的一些实施例中,所述第一设置模块包括:
43、第一设置子模块,用于响应于所述第一时间戳不小于所述第二时间戳,将所述待生成流水号的时间戳初始值设置为所述第一时间戳;
44、第二设置子模块,用于响应于所述第一时间戳小于所述第二时间戳,将所述待生成流水号的时间戳初始值设置为所述第二时间戳。
45、在本公开的一些实施例中,所述装置还包括:
46、存储模块,用于将所述待生成流水号的生成信息以及生成所述待生成流水号时的系统时间戳存储在应用数据库中。
47、在本公开的一些实施例中,所述装置还包括:
48、第三设置模块,用于响应于所述第一时间戳、第二时间戳和第三时间戳不满足所述第一设定条件,将所述上一个流水号的时钟回拨标识位确定为所述待生成流水号的时钟回拨标识位。
49、在本公开的一些实施例中,所述待生成水流号的生成信息还包括符号位、版本号和应用实例编号中的至少一项;
50、所述装置还包括:第二获取模块,用于通过编号服务器生成所述应用实例编号;从应用数据库中获取所述版本号和所述符号位。
51、在本公开的一些实施例中,所述第二获取模块包括:
52、发送子模块,用于向所述编号服务器发送编号请求,所述编号请求中携带有应用名称、主机名称以及局域网地址;
53、接收子模块,用于接收所述编号服务器返回的应用实例编号。
54、在本公开的一些实施例中,所述应用实例编号通过以下步骤生成:
55、所述编号服务器获取发送所述编号请求的网络地址;
56、根据所述网络地址,以所述应用名称为主键请求分布式锁;
57、响应于没有成功请求到所述分布式锁,在设定时间间隔后执行所述以所述应用名称为主键请求分布式锁的操作;
58、响应于成功请求到所述分布式锁,根据所述应用名称在编号数据库中查询应用实例编号;
59、响应于根据所述应用名称所查询到的应用实例编号的最大值等于编号阈值,将所述应用实例编号的初始值设置为用于返回的应用实例编号;
60、响应于根据所述应用名称没有成功查询到应用实例编号,将应用实例编号的初始值设置为用于返回的应用实例编号;
61、响应于根据所述应用名称查询到的应用实例编号小于所述编号阈值,对所查询到的最大的应用实例编号执行加一操作,得到用于返回的应用实例编号。
62、根据本公开实施例的再一方面,提供一种电子设备,应用于业务方触发了生成流水号的场景,该电子设备包括:
63、存储器,用于存储计算机程序;
64、处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现上述流水号生成方法。
65、根据本公开实施例的再一方面,提供一种计算机可读存储介质,应用于业务方触发了生成流水号的场景,其上存储有计算机程序,计算机指令被处理器执行时,实现上述流水号生成方法。
66、基于本公开上述实施例提供的流水号生成方法以及电子设备、存储介质,在业务方发生需要生成流水号的操作时,通过将比较当前系统时间戳、上一个流水号的占位时间戳、生成上一个流水号时的系统时间戳,可以确定出待生成流水号的时钟回拨标识位,并可确定出待生成流水号的时间戳初始值,而根据上一个流水号的序列号与序列号阈值,可确定出待生成流水号是否需要消费未来时间,如果需要消费未来时间,则可对待生成流水号的时间戳初始值执行自增一的操作,并可将待生成流水号的序列号设置为序列号初始值,由此可生成并返回待生成流水号。本公开实施例通过对一个设定时间段(如1秒)内的流水号已经生成到最大值时(也即上一个流水号的序列号生成到序列号阈值),也可通过消费未来时间的方式继续生成流水号,确保流水号生成的连续性。
67、下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。