序列号生成方法、装置及服务器

文档序号:1505352 发布日期:2020-02-07 浏览:19次 >En<

阅读说明:本技术 序列号生成方法、装置及服务器 (Serial number generation method and device and server ) 是由 高宇 纪朋伟 于 2019-10-09 设计创作,主要内容包括:本发明提供一种序列号生成方法、装置及服务器,该方法包括获取序列号池的标识,该标识用于唯一标记该序列号池;根据该序列号池的当前序列位置按顺序生成偏移量;按照预设规则将该序列号池的标识和偏移量拼装为序列号。该方法保证了生成的序列号的唯一性。(The invention provides a serial number generation method, a serial number generation device and a server, wherein the method comprises the steps of obtaining an identifier of a serial number pool, wherein the identifier is used for uniquely marking the serial number pool; sequentially generating offsets according to the current sequence position of the serial number pool; and assembling the identification and the offset of the serial number pool into a serial number according to a preset rule. The method ensures the uniqueness of the generated serial number.)

序列号生成方法、装置及服务器

技术领域

本发明涉及计算机技术,尤其涉及一种序列号生成方法、装置及服务器。

背景技术

在大量的计算机应用中需要生成序列号用以唯一的标识应用系统中的各种信息,随着数据量越来越大,对于序列号的唯一性的要求也越来越高,很多应用的正常运行也依赖于序列号的唯一性。

相关技术中的序列号生成方法,大部分是基于服务器时间和随机数算法实现的,先用服务器时间和偏移量计算一个基数,再用此基数进行随机,然后再加上系统时间生成序列号。

在高并发的情况下,由于产生的随机数可能相同,导致生成的序列号不唯一,使得依赖序列号唯一性的各种应用发生异常。

发明内容

本发明提供一种序列号生成方法、装置及服务器,保证了生成的序列号的唯一性。

第一方面,本发明提供一种序列号生成方法,包括:

获取序列号池的标识,所述标识用于唯一标记所述序列号池;

根据所述序列号池的当前序列位置按顺序生成偏移量;

按照预设规则将所述序列号池的标识和所述偏移量拼装为序列号。

可选的,所述获取序列号池的标识之前,所述方法还包括:

从至少一个目标序列号池中选择所述序列号池;

锁定所述序列号池的当前序列位置。

可选的,所述根据所述序列号池的当前序列位置按顺序生成偏移量,包括:

在预先分配给所述序列号池的偏移区间内,根据所述序列号池的当前序列位置按顺序生成偏移量。

可选的,所述按照预设规则将所述序列号池的标识和所述偏移量拼装为序列号,包括:

将所述序列号池的标识、所述偏移量和所述序列号池所在节点的机器号按顺序拼接为序列号;

其中,所述序列号池所在节点的机器号与所述序列号池的偏移区间对应,所述序列号池的偏移区间与所述序列号池之外的其他序列号池的偏移区间不重叠。

可选的,所述获取序列号池的标识,包括:

将用户自定义的编码确定为序列号池的标识。

可选的,所述将用户自定义的编码确定为序列号池的标识,包括:

执行预设脚本获取用户自定义的动态编码;

将所述动态编码确定为序列号池的标识。

可选的,所述按照预设规则将所述序列号池的标识和所述偏移量拼装为序列号,包括:

将预设前缀和/或预设后缀、所述序列号池的标识和所述偏移量拼接为序列号。

第二方面,本发明提供一种序列号生成装置,包括:

获取模块,用于获取序列号池的标识,所述标识用于唯一标记所述序列号池;

生成模块,用于根据所述序列号池的当前序列位置按顺序生成偏移量;

拼装模块,用于按照预设规则将所述序列号池的标识和所述偏移量拼装为序列号。

可选的,所述装置还包括:

选择模块,用于从至少一个目标序列号池中选择所述序列号池;锁定所述序列号池的当前序列位置。

可选的,所述生成模块用于:

在预先分配给所述序列号池的偏移区间内,根据所述序列号池的当前序列位置按顺序生成偏移量。

可选的,所述拼装模块用于:

将所述序列号池的标识、所述偏移量和所述序列号池所在节点的机器号按顺序拼接为序列号;

其中,所述序列号池所在节点的机器号与所述序列号池的偏移区间对应,所述序列号池的偏移区间与所述序列号池之外的其他序列号池的偏移区间不重叠。

可选的,所述获取模块用于:

将用户自定义的编码确定为序列号池的标识。

可选的,所述获取模块用于:

执行预设脚本获取用户自定义的动态编码;

将所述动态编码确定为序列号池的标识。

可选的,所述拼装模块用于:

将预设前缀和/或预设后缀、所述序列号池的标识和所述偏移量拼接为序列号。

第三发面,本发明提供一种服务器,包括存储器及处理器;所述存储器与所述处理器连接;

所述存储器,用于存储计算机程序;

所述处理器,用于在计算机程序被执行时,实现如上述第一方面中任一项所述的序列号生成方法。

第四方面,本发明提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述第一方面中任一项所述的序列号生成方法。

本发明提供一种序列号生成方法、装置及服务器,该方法通过获取序列号池的标识,该标识用于唯一标记该序列号池;根据该序列号池的当前序列位置按顺序生成偏移量;按照预设规则将该序列号池的标识和偏移量拼装为序列号。由于序列号池的标识唯一,该序列号池中每次生产的偏移量也唯一,从而保证了由该序列号池的标识和偏移量拼装获得的序列号的唯一性,也避免了依赖序列号唯一性的各种应用发生异常。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明提供的一种序列号应用系统示意图;

图2为本发明提供的一种序列号生成方法的流程示意图;

图3为本发明提供的一种序列号池的数据结构示意图;

图4为本发明提供的一种序列号生成装置的结构示意图;

图5为本发明提供的一种服务器的结构示意图。

具体实施方式

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

图1为本发明提供的一种序列号应用系统示意图。如图1所示,该系统中包括终端设备101、终端设备102、服务器103,其中服务器103还可以为服务器集群。用户可以通过终端设备102、终端设备102向服务器发送请求以生成序列号,服务器103在接收到请求后,即可获取自身的序列号池的标识,并进一步按该序列号池的当前序列位置按顺序生成偏移量,再按照预设规则将序列号池的标识和该偏移量拼装为序列号,由于序列号池的标识和偏移量的唯一性,从而可以保证生成的序列号的唯一性。以下结合实施例对本发明提供的序列号生成方法做示例说明。

图2为本发明提供的一种序列号生成方法的流程示意图。该方法的执行可以为图1所示系统中的服务器。如图2所示,该方法包括:

S201、获取序列号池的标识,该标识用于唯一标记该序列号池。

服务器中可以具有至少一个序列号池,每个序列号池具有唯一的标识用以与其他序列号池进行区分。序列号池可以由序列号池生成模块进行创建,例如,序列号池生成模块在单一资源比如数据库或redis中创建若干的序列号对象池。每个序列号池中具有存放序列号的空间,该空间在初始化序列号池时进行创建。如图3所示,每个序列号池中包括若干序列号数组,每个序列号数组中包括若干个序列号块,每个序列号块中存放一个序列号。若序列号池的空间填充满了,则可以自动创建新的序列号池,新的序列号池可以按照自然日时间戳精确到毫秒进行唯一标记。本领域技术人员可以理解的是,序列号池也可以使用其他标识进行唯一标记,本实施例对此不作限定。以序列号的标识为唯一时间戳为例,获取到序列号池的标识为20190707221123234。

S202、根据该序列号池的当前序列位置按顺序生成偏移量。

每个序列号池中按照顺序生成偏移量,当前序列位置即为上次生成的序列号的偏移量,例如当前序列位置是23456,也就是上次生成的序列号偏移量是23456,那么本次生成序列号时按照顺序生成偏移量为23457。由于偏移量按顺序生成,从而可以保证在该序列号池中每次获得的偏移量是唯一的。

S203、按照预设规则将该序列号池的标识和偏移量拼装为序列号。

预设规则可以按照实际需要进行设置,例如可以设置序列号的拼装顺序、添加预设的固定字符串等。例如按照序列号池的标识、偏移量的顺序进行拼接,获得序列号2019070722112323423457。由于序列号池的标记是唯一的,且该序列号池中的偏移量也唯一,从而可以保证该序列号也是唯一的。拼装完成后产生的序列号在被提取发送给请求该序列号的应用请求方之后,即被标记为已作废。

本实施例提供的序列号生成方法,通过获取序列号池的标识,该标识用于唯一标记该序列号池;根据该序列号池的当前序列位置按顺序生成偏移量;按照预设规则将该序列号池的标识和偏移量拼装为序列号。由于序列号池的标识唯一,该序列号池中每次生产的偏移量也唯一,从而保证了由该序列号池的标识和偏移量拼装获得的序列号的唯一性,也避免了依赖序列号唯一性的各种应用发生异常。

在上述实施例的基础上,由于服务器中的序列号池可以为多个,因此,在S201中获取序列号池的标识之前,该方法还包括:

从至少一个目标序列号池中选择该序列号池;锁定该序列号池的当前序列位置。

服务器中的序列号池可以为多个,服务器在生成序列号时,从多个序列号池中选择一个可用序列号池,例如若一个序列号池的序列号空间已经填充满,则该序列号池则不可用,从可用的序列号池中选择一个作为本次生成序列号的序列号池,例如可以从多个可用序列号池中随机选择一个。在选择出序列号池之后,锁定当前序列号池的当前序列位置,这样可以避免其他请求使用该序列号池的当前序列位置来进行顺序生成偏移量而导致序列号重复。

在一种可能的方式中,S202中根据序列号池的当前序列位置按顺序生成偏移量,包括:

在预先分配给该序列号池的偏移区间内,根据该序列号池的当前序列位置按顺序生成偏移量。

每个序列号池中具有一个偏移区间,即偏移量的片段区间,生成序列号时,会从这个片段区间内按照顺序取偏移量。例如序列号池的偏移量的片段区间是00001-99999,这样该序列号池所生成的序列号的偏移量就是从00001开始,每次按顺序加1直至99999。

可选的,序列号池的偏移区间可以从一个全局数据库或redis中获取以保证每个序列号池的偏移区间也没有重复值,初始化序列号池或者生成新的序列号池时可以获取到偏移区间的起始值。进一步的,每个序列号池还可以具有一个机器号,该机器号用来标记该序列号池为哪个虚拟机或哪个容器节点所有。记录每个机器号对应的虚拟机或容器节点的序列号池所获取到的偏移区间记录,便于在发生故障或进行维护时快速定位一个序列号是在哪个虚拟机或容器节点上产生的。

例如,机器号为001号的容器启动时其序列号池获取的偏移区间为 0-100,则生成序列号时偏移量会自动填充为:00001、00002、00003…直到填充到00100。由于是从全局获取区间,则机器号为002号容器启动时其序列号池获取的偏移区间为101-200,则生成序列号时偏移量会自动填充为000101、000102、000103…直到填充到00200。此时001号容器再次获取偏移区间为:201-300,则填充的偏移量为000201、000202…,那么用户在查询时只要查询机器号和偏移区间的生成记录,便可以知道该批序列号在哪个容器使用,对于维护定位问题提供方便。

此外,本实施例中服务器可以为集群模式,在集群模式下,每个服务器的机器号记录在内存和数据库中,其中还记录了服务器序列号以及网卡 MAC地址。若集群模式下动态扩展一个节点,则对比该节点的上述要是是否与内存和数据库中的已有记录,若不一致,则重新为该动态扩展的节点分配一个新的机器号并保存,从而保证了在集群模式下机器号的不停机动态生成。

相应的,S203中按照预设规则将序列号池的标识和偏移量拼装为序列号,可以包括:

将序列号池的标识、偏移量和序列号池所在节点的机器号按顺序拼接为序列号;

其中,该序列号池所在节点的机器号与该序列号池的偏移区间对应,该序列号池的偏移区间与该序列号池之外的其他序列号池的偏移区间不重叠。

例如,序列号池的标识为20190707221123234,偏移量为23457,机器号为001,则生成的序列号为2019070722112323423457001。本实施例中生成的序列号不仅通过序列号池的标识以及偏移量的唯一性保证了序列号的唯一性,还可通过序列号中携带的机器号提高了问题定位的效率。

在实际应用中,请求序列号生成服务的应用请求方可能需要根据自己的需要生成自定义序列号,为了实现用户自定义功能,S201中,获取序列号池的标识,可以包括:将用户自定义的编码确定为序列号池的标识。

例如,可以在自定义配置表中配置一个用户自定义的编码作为序列号池的标识,例如,将学号的前五位固定数值作为用户自定义的编码,还可以配置偏移量的取值范围,例如学生数量1000个,配置偏移量的取值范围为0001-1000,这样在生成序列号时,可以自动在偏移量的取值范围内进行递增操作,每次递增时会读取当前最新的顺序然后按照规则在指定位数进行递增,使用线程安全索机制,保证递增的唯一性。这样就可以生成 1000个序列号作为学生的学号,每个序列号都是惟一的。

进一步的,将用户自定义的编码确定为序列号池的标识,还可以包括:

执行预设脚本获取用户自定义的动态编码;将该动态编码确定为序列号池的标识。

用户自定义的序列号除了上述固定的编码外,还可以是在生成序列号时动态加载的,例如该用户自定义的编码为地区码、国家码等,在生成序列号时,程序执行脚本来读取当前的自定义编码。

在上述实施例的基础上,S203中按照预设规则将序列号池的标识和偏移量拼装为序列号,包括:

将预设前缀和/或预设后缀、序列号池的标识和偏移量拼接为序列号。

例如,使用该序列号生成服务的应用请求方需要生成带有自身标志的序列号,假设应用请求方使用该序列号的业务缩写是abc,应用请求方需要在序列号中体现该缩写,那么可以将abc作为前缀或后缀拼装在序列号中,例如,序列号池的标识为20190707221123234,偏移量为23457,则将abc作为前缀后拼接获得的序列号为abc2019070722112323423457。

该方法可以根据序列号请求方的实际需要在序列号中添加前缀和/或后缀,提高了序列号的实用性和多样性。

图4为本发明提供的一种序列号生成装置的结构示意图。如图4所示,序列号生成装置40包括:

获取模块401,用于获取序列号池的标识,该标识用于唯一标记该序列号池;

生成模块402,用于根据该序列号池的当前序列位置按顺序生成偏移量;

拼装模块403,用于按照预设规则将该序列号池的标识和该偏移量拼装为序列号。

可选的,序列号生成装置40还包括:

选择模块404,用于从至少一个目标序列号池中选择该序列号池;锁定该序列号池的当前序列位置。

可选的,该生成模块402用于:

在预先分配给该序列号池的偏移区间内,根据该序列号池的当前序列位置按顺序生成偏移量。

可选的,该拼装模块403用于:

将该序列号池的标识、该偏移量和该序列号池所在节点的机器号按顺序拼接为序列号;

其中,该序列号池所在节点的机器号与该序列号池的偏移区间对应,该序列号池的偏移区间与该序列号池之外的其他序列号池的偏移区间不重叠。

可选的,该获取模块401用于:

将用户自定义的编码确定为序列号池的标识。

可选的,该获取模块401用于:

执行预设脚本获取用户自定义的动态编码;

将该动态编码确定为序列号池的标识。

可选的,该拼装模块403用于:

将预设前缀和/或预设后缀、该序列号池的标识和该偏移量拼接为序列号。

本实施例提供的序列号生成装置,可用于执行上述任一方法实施例中的序列号生成方法,其实现原理和技术效果类似,此处不再赘述。

图5为本发明提供的一种服务器的结构示意图。如图5所示,服务器 50包括存储器501及处理器502;该存储器501与该处理器502连接;

该存储器501,用于存储计算机程序;

该处理器502,用于在计算机程序被执行时,实现如上述任一方法实施例中的序列号生成方法。

第四方面,本发明提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如上述任一方法实施例中的序列号生成方法。

在本发明所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个单元中。上述模块成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等) 或处理器(英文:processor)执行本申请各个实施例方法的部分步骤。

应理解,上述处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合发明所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器可能包含高速RAM存储器,也可能还包括非易失性存储NVM,例如至少一个磁盘存储器,还可以为U盘、移动硬盘、只读存储器、磁盘或光盘等。

总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component,PCI)总线或扩展工业标准体系结构(ExtendedIndustry Standard Architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,本申请附图中的总线并不限定仅有一根总线或一种类型的总线。

上述计算机可读存储介质可以是由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储介质可以是通用或专用计算机能够存取的任何可用介质。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换。

12页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种文本规整方法、装置、设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!