CN108846085B - 一种id生成方法、装置、电子设备及系统 - Google Patents
一种id生成方法、装置、电子设备及系统 Download PDFInfo
- Publication number
- CN108846085B CN108846085B CN201810599091.3A CN201810599091A CN108846085B CN 108846085 B CN108846085 B CN 108846085B CN 201810599091 A CN201810599091 A CN 201810599091A CN 108846085 B CN108846085 B CN 108846085B
- Authority
- CN
- China
- Prior art keywords
- value
- maximum
- self
- increment
- server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Abstract
本发明实施例提供了一种ID生成方法、装置、电子设备及系统,其中,该方法包括:接收调用端发送的ID生成指令;通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,执行通过自增序列生成第一自增ID值的步骤;当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。使得主服务器发送至调用端的ID值总是严格递增的,并且,在主服务器故障排除后,可以快速生成严格递增的ID值,不需要将从服务器生成的所有ID值同步到主服务器。提高了ID值生成效率。
Description
技术领域
本发明涉及数据处理技术,特别是涉及一种ID生成方法、装置、电子设备及系统。
背景技术
在分布式数据库的使用中,为了保证使用主键对分布式数据库中每条数据的插入、更新以及删除操作的正常进行,要求主键在分布式数据库中具有唯一性。
在现有技术中,可以通过使用两台服务器生成基于服务端标识号和自增序列的ID(identity,唯一编码)值的方式,来保证主键在分布式数据库中的唯一性,具体的,先使用第一服务器生成基于该第一服务器标识号和自增序列的ID值,并将第一服务器生成的ID值作为一个主键,当该台服务器故障时,使用第二服务器生成基于该第二服务器标识号和自增序列的ID值,然后将第二服务器生成的ID作为另一个主键。
然而,发明人在实现本发明的过程中发现,现有技术至少存在如下问题:
该方案虽然可以保证主键具有唯一性,但由于每台服务器生成的ID中具有该服务器的标识号,当前一次使用标识号较大的服务器生成ID,后一次使用标识号较小的服务器生成ID时,该两个ID并不是严格递增的。例如,假设第一服务器标识号为01,第二服务器标识号为02,前一次使用第二服务器生成的ID为02000123,后一次使用第一服务器生成的ID为010000124,可见,该两个ID并不是严格递增的。
发明内容
本发明实施例的目的在于提供一种ID生成方法、装置、电子设备及系统,以实现生成严格递增的ID。具体技术方案如下:
在本发明实施例的一个方面,本发明实施例提供了一种ID生成方法,应用于主服务器,该方法包括:
接收调用端发送的ID生成指令;
通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;
当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,执行通过自增序列生成第一自增ID值的步骤;
当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
在本发明实施例的又一方面,本发明实施例还提供了一种ID生成方法,应用于从服务器,从服务器本地保存有第二ID列表,第二ID列表中保存有第一最大ID值,该方法包括:
接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值;
判断第一自增ID值是否大于第一最大ID值;
在第一自增ID值小于或等于第一最大ID值时,发送携带有第一最大ID值的第一反馈信息至主服务器;
在第一自增ID值大于第一最大ID值时,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
在本发明实施例的又一方面,本发明实施例还提供了一种ID生成装置,应用于主服务器,该装置包括:
接收模块,用于接收调用端发送的ID生成指令;
第一自增ID值生成模块,用于通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;
接收模块,用于当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,触发第一自增ID值生成模块;当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
在本发明实施例的又一方面,本发明实施例还提供了一种ID生成装置,应用于从服务器,该从服务器本地保存有第二ID列表,该第二ID列表中保存有第一最大ID值,该装置包括:
接收模块,用于接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值;
判断模块,用于判断第一自增ID值是否大于第一最大ID值;
发送模块,用于在第一自增ID值小于或等于第一最大ID值时,发送携带有第一最大ID值的第一反馈信息至主服务器;在第一自增ID值大于第一最大ID值时,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述任一所述的一种ID生成方法。
在本发明实施的又一方面,本发明实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的一种ID生成方法。
在本发明实施例的又一方面,本发明实施例还提供了一种ID生成系统,该系统包括主服务器和从服务器,从服务器本地保存有第二ID列表,第二ID列表中保存有第一最大ID值;
主服务器,用于:接收调用端发送的ID生成指令;通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;
从服务器,用于:接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值;判断第一自增ID值是否大于第一最大ID值;在第一自增ID值小于或等于第一最大ID值时,发送携带有第一最大ID值的第一反馈信息至主服务器;在第一自增ID值大于第一最大ID值时,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值;
主服务器,还用于:当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,触发主服务器执行通过自增序列生成第一自增ID值的步骤;
当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
本发明实施例提供的一种ID生成方法、装置、电子设备及系统,在接收到调用端发送的ID生成指令后,可以通过预先设置在主服务器上的自增序列生成第一自增ID值,为了保证主服务器发送给调用端的ID值是严格递增的,主服务器可以将生成的第一自增ID值发送至从服务器,由从服务器判断该第一自增ID值是否严格递增,并发送反馈信息至主服务器,当主服务器接收到的是携带第一最大ID值的第一反馈信息中时,则说明主服务器生成的第一自增ID值不是严格递增的,则可以基于从服务器反馈的第一最大ID值,通过自增序列重新生成第一自增ID值,当主服务器接收到的是用于表示第一自增ID值大于从服务器本地保存的第一最大ID值的第二反馈信息时,则说明第一自增ID值是严格递增的,则可以将该第一最大ID值发送至调用端。可以使得主服务器发送至调用端的ID值总是严格递增的,从而解决了现有技术中生成的ID值不是严格递增的问题,并且,在主服务器故障排除后,可以快速生成严格递增的ID值,不需要将从服务器生成的所有ID值同步到主服务器。当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为应用本发明实施例的一种ID生成方法的ID生成系统的结构示意图;
图2为本发明实施例的一种ID生成方法应用于主服务器的第一种实施方式的流程图;
图3为本发明实施例的一种ID生成方法应用于从服务器的第一种实施方式的流程图;
图4为应用本发明实施例的一种ID生成方法交互过程的流程图;
图5为本发明实施例的一种ID生成方法应用于主服务器的第二种实施方式的流程图;
图6为本发明实施例的一种ID生成方法应用于主服务器的第三种实施方式的流程图;
图7为本发明实施例的一种ID生成方法应用于从服务器的第二种实施方式的流程图;
图8为本发明实施例的一种ID生成方法应用于从服务器的第三种实施方式的流程图;
图9为本发明实施例的一种ID生成方法应用于从服务器的第四种实施方式的流程图;
图10为本发明实施例的一种应用于主服务器的ID生成装置的结构示意图;
图11为本发明实施例的一种应用于从服务器的ID生成装置的结构示意图;
图12为本发明实施例的一种应用于主服务器的电子设备的结构示意图;
图13为本发明实施例的一种应用于从服务器的电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
为了解决现有技术存在的问题,本发明实施例提供了一种ID生成方法、装置及电子设备,以实现生成严格递增的ID,并将生成的严格递增的ID作为主键发送至调用端。
首先,介绍本发明实施例的一种ID生成方法的应用场景,本发明实施例的一种ID生成方法,可以应用于图1所示的一种ID生成系统中,在图1中,可以包括第一服务器110和第二服务器120,第一服务器110可以是主服务器,第二服务器120可以是从服务器。
第一服务器110在接收到调用端发送的ID生成指令后,可以通过第一服务器110中设置的自增序列生成第一自增ID值,并将该第一自增ID值发送至第二服务器120中,然后接收第二服务器120发送的反馈信息,进而根据该反馈信息确定是否将该第一自增ID值作为第一最大ID值。从而保证主服务器反馈给调用端的ID值是严格递增的,解决现有技术中的ID值不是严格递增的问题。
下面,对本发明实施例的一种ID生成方法进行介绍。
实施例一
如图2所示,为本发明实施例的一种ID生成方法第一种实施方式的流程图,在图2中,该方法可以包括:
S210,接收调用端发送的ID生成指令。
在一些示例中,当调用端使用ID作为主键之前,可以向应用本发明实施例的一种ID生成方法的主服务器发送ID生成指令,因此,上述的主服务器可以接收到调用端发送的ID生成指令,并通过本发明实施例的一种ID生成方法生成ID值发送至调用端。
在一些示例中,该调用端可以是使用ID作为主键的任一硬件或软件,例如,该调用端可以是数据库所处的硬件设备。
S220,通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器。
具体的,上述的主服务器在接收到调用端发送的ID生成指令后,可以依据该ID生成指令,通过自增序列生成第一自增ID值。
在一些示例中,该自增序列可以预先设置在主服务中,当主服务器是第一次接收到ID生成指令时,在通过自增序列生成第一自增ID值时,可以从0开始自增,也就是说,当主服务器是第一次接收到ID生成指令时,通过自增序列生成的第一自增ID值是1。
在一些示例中,主服务中可以设置生成第一自增ID值的位数,例如,可以设置生成第一自增ID值的位数为8位、16位或者32位等。
当设置的生成第一自增ID值的位数为8位时,生成的第一自增ID值可以是00000001。
当主服务器不是第一次接收到ID生成指令时,在通过自增序列生成第一自增ID值时,可以在上一次生成的第一自增ID值的基础上,进行自增生成新的第一自增ID值。假设,主服务器上一次生成的第一自增ID值为8位的00001101,则在接收到ID生成指令后,可以通过自增序列,生成新的8位第一自增ID值00001102。
在一些示例中,主服务器在没有故障时,可以一直通过自增序列生成第一自增ID值,且每次生成的第一自增ID值是严格递增的,为了保证在主服务器出现故障时,调用端可以获取到ID值,可以设置一个从服务器。当主服务器出现故障时,可以由从服务器生成自增ID值,并发送至调用端,当主服务器解除故障后,由主服务器继续生成自增ID值。
当从由从服务器生成自增ID值切换为由主服务器生成自增ID值时,为了保证主服务器后续生成的自增ID值也是严格递增的,当上述的主服务器在生成第一自增ID值后,可以将该第一自增ID值发送至从服务器,由从服务器判断该第一自增ID值是否严格递增,并反馈包含有判断结果的反馈信息。
在一些示例中,从服务器中可以保存有第一最大ID值,该第一最大ID值可以是由主服务器在发送本次生成的第一自增ID值之前,将上一次生成的第一自增ID值发送至从服务器的,也可以是由从服务器自身生成的。
例如,当主服务器未出现故障时,则一直由主服务器生成第一自增ID值,在发送本次生成的第一自增ID值之前,会将上一次生成的第一自增ID值发送至从服务器,因此,从服务器可以将该上一次生成的第一自增ID值作为第一最大ID值保存在从服务器本地,在接收到主服务发送的本次生成的第一自增ID值后,根据该上一次生成的第一自增ID值与本次生成的第一自增ID值,判断本次生成的第一自增ID值是否严格递增。
在一些示例中,当主服务器出现故障后,则由从服务器生成第一自增ID值,从服务器在生成第一自增ID值后,除将生成的第一自增ID值发送至调用端外,还可以将自身生成的第一自增ID值作为第一最大ID值进行保存,以使得在主服务器故障排除,并接收到主服务器发送的第一自增ID值后,能够判断接收到的主服务器发送的第一自增ID值是否严格递增。
S230,当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,执行步骤S210。
具体的,当主服务器接收到的是携带有第一最大ID值的第一反馈信息时,则说明主服务器生成的第一自增ID值小于第一最大ID值,该第一自增ID值不是严格递增的,因此,不能将该第一自增ID值发送至调用端,对此,上述的主服务器可以将该第一最大ID值作为自增序列的初始值,并执行步骤S210。
假设,上述的主服务器发送至从服务器的第一自增ID值为00101052,从服务器本地保存的第一最大ID值为00110523,则上述的从服务器在接收到该第一自增ID值“00101052”后,可以将该第一自增ID值“00101052”与第一最大ID值“00110523”进行对比,可见,第一最大ID值大于主服务器发送的第一自增ID值,可以将该第一最大ID值“00110523”添加至第一反馈信息中,并发送第一反馈信息至主服务器。
因此,上述的主服务器接收到从服务器发送的第一反馈信息,该第一反馈信息中可以携带有第一最大ID值“00110523”,当主服务器接收到第一最大ID值“00110523”后,可以确定产生的第一自增ID值不是严格递增的,可以基于该第一最大ID值“00110523”,重新生成新的第一自增ID值“00110524”。
S240,当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
具体的,当主服务器接收到的是用于表示第一自增ID值大于第一最大ID值的第二反馈信息时,则说明主服务器生成的第一自增ID值是严格递增的,可以将该第一自增ID值发送至调用端。
假设,上述的主服务器将重新生成的第一自增ID值“00110524”发送至从服务器后,从服务器反馈的第二反馈信息是表示该第一自增ID值“00110524”大于自身保存的第一最大ID值的反馈信息,则上述的主服务器可以将该第一自增ID值“00110524”发送至调用端。
在一些示例中,从服务器在发送用于表示第一自增ID值大于从服务器本地保存的第一最大ID值的反馈信息时,可以仅发送一个包含“大于”的反馈信息,对应的,主服务器在接收到该包含“大于”的第二反馈信息后,可以确定第一自增ID值大于第一最大ID值。
还可以发送一个包含第一自增ID值的反馈信息,对应的,主服务器在接收到该包含第一自增ID值的反馈信息后,可以确定第一自增ID值大于从服务器本地保存的第一最大ID值。
通过本发明实施例的一种ID生成方法,主服务器在接收到调用端发送的ID生成指令后,可以通过预先设置在主服务器上的自增序列生成第一自增ID值,为了保证主服务器发送给调用端的ID值是严格递增的,主服务器可以将生成的第一自增ID值发送至从服务器,由从服务器判断该第一自增ID值是否严格递增,并发送反馈信息至主服务器,当主服务器接收到的是携带第一最大ID值的第一反馈信息中时,则说明主服务器生成的第一自增ID值不是严格递增的,则可以基于从服务器反馈的第一最大ID值,通过自增序列重新生成第一自增ID值,当主服务器接收到的是用于表示第一自增ID值大于从服务器本地保存的第一最大ID值的第二反馈信息时,则说明第一自增ID值是严格递增的,则可以将该第一最大ID值发送至调用端。可以使得主服务器发送至调用端的ID值总是严格递增的,从而解决了现有技术中生成的ID值不是严格递增的问题。并且,在主服务器故障排除后,可以快速生成严格递增的ID值,不需要将从服务器生成的所有ID值同步到主服务器。
实施例二
与上述的应用于主服务器的ID生成方法相对应,本发明实施例还提供了一种ID生成方法,如图3所示,为本发明实施例的一种ID生成方法应用于从服务器的第一种实施方式的流程图,在图3中,该方法可以包括:
S310,接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值。
在一些示例中,为了保证主服务器发送给调用端的ID值是严格递增的,主服务器可以将生成的第一自增ID值发送至从服务器,由从服务器判断该第一自增ID值是否严格递增。因此,从服务器可以接收到主服务器发送的第一自增ID值。
在一些示例中,从服务器本地可以保存有第二ID列表,第二ID列表中可以保存有第一最大ID值。该第一最大ID值为从服务器本地保存的最大的ID值。从服务器在接收到该第一自增ID值后,可以从第二ID列表中获取第一最大ID值。
S320,判断第一自增ID值是否大于第一最大ID值。
在一些示例中,从服务器在接收到主服务发送的第一自增ID值,并从第二ID列表中获取到第一最大ID值后,可以使用该第一最大ID值来判断该第一自增ID值是否严格递增。
具体的,上述的从服务器可以通过判断该第一自增ID值是否大于该第一最大ID值,来判断该第一自增ID值是否严格递增。当第一自增ID值小于或等于第一最大ID值时,则说明该第一自增ID值不是严格递增的,则上述的从服务器可以执行步骤S330,当第一自增ID值大于第一最大ID值时,则可以说明该第一自增ID值是严格递增的,可以执行步骤S340。
S330,发送携带有第一最大ID值的第一反馈信息至主服务器。
具体的,当第一自增ID值小于或等于第一最大ID值时,则可以说明该第一自增ID值不是严格递增的,为了保证主服务器发送给调用端的ID值是严格递增的,则可以将携带有第一最大ID值的第一反馈信息发送至主服务器,以使得主服务器可以基于该第一最大ID值重新生成第一自增ID值。当重新生成第一自增ID值大于第一最大ID值时,则该重新生成的第一自增ID值是递增的。
S340,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中。
其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
具体的,当第一自增ID值大于第一最大ID值时,则可以说明该第一自增ID值是严格递增的,则可以发送表示第一自增ID值大于第一最大ID值的第二反馈信息至主服务器,主服务器在接收到该表示第一自增ID值大于第一最大ID值的第二反馈信息后,可以确认该第一自增ID值是严格递增的,然后将该第一自增ID值发送至调用端。
在一些示例中,为了保证在后续接收到主服务器发送的新的第一自增ID值后,能够正确判断该新的第一自增ID值是否严格递增,从服务器可以在发送第一自增ID值大于第一最大ID值的反馈信息至主服务器后,可以将该第一自增ID值作为第一最大ID值存储在第二ID列表中。
通过本发明实施例的一种ID生成方法,从服务器可以在接收到主服务器发送的第一自增ID值后,从本地保存的第二ID列表中获取第一最大ID值,然后通过判断第一自增ID值是否大于第一最大ID值,来判断第一自增ID值是否严格递增,在第一自增ID值小于或等于第一最大ID值时,则可以说明该第一自增ID值不是严格递增的,对此,从服务器可以将发送携带有第一最大ID值的第一反馈信息至主服务器,以使得主服务器基于该第一最大ID值重新生成第一自增ID值,以保证该重新生成的第一自增ID值是递增的,在第一自增ID值大于第一最大ID值时,则可以说明该第一自增ID值是严格递增的,则可以发送表示第一自增ID值大于第一最大ID值的第二反馈信息至主服务器,主服务器在接收到该表示第一自增ID值大于第一最大ID值的反馈信息后,可以确认该第一自增ID值是严格递增的,然后将该第一自增ID值发送至调用端。从而可以使得主服务器发送至调用端的ID值是严格递增的。
为了更清楚的说明本发明实施例的一种ID生成方法,这里以调用端、主服务器和从服务器之间的交互过程为例进行说明,如图4所示,为应用本发明实施例的一种ID生成方法交互过程的流程图,在图4中,调用端、主服务器和从服务器之间可以进行如下交互:
S410,调用端发送的ID生成指令;
S420,主服务器在接收到调用端发送的ID生成指令后,可以通过自增序列生成第一自增ID值;
S430,然后主服务器可以发送第一自增ID值;
S440,从服务器在接收到主服务器发送的第一自增ID值后,可以从第二ID列表中获取第一最大ID值,判断第一自增ID值是否大于第一最大ID值;
S450,当第一自增ID值小于或等于第一最大ID值时,从服务器可以发送携带有第一最大ID值的第一反馈信息;
S460,主服务器在接收到携带有第一最大ID值的第一反馈信息后,可以获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,执行步骤S420,生成基于第一最大ID值的新的第一自增ID值;
S470,当第一自增ID值大于第一最大ID值时,从服务器可以发送第二反馈信息至主服务器,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值;
S480,从服务器在发送第二反馈信息时,也可以将第一自增ID值作为第一最大ID值存储在第二ID列表中;
S490,主服务器在接收到从服务器发送的第二反馈信息后,可以确认该第一自增ID值是严格递增的,则可以发送第一自增ID值至调用端。
从而可以使得主服务器发送至调用端的ID值是严格递增的。
实施例三
在本发明实施例的一种可选的实施例中,在图2所示的一种ID生成方法的基础上,本发明实施例还提供了一种ID生成方法,如图5所示,为本发明实施例的一种ID生成方法应用于主服务器的第二种实施方式的流程图,在图5中,S220,通过自增序列生成第一自增ID值,可以包括:
S221,从第一ID列表中获取第二最大ID值,以第二最大ID值为自增序列的初始值,通过自增序列生成第一自增ID值。
在一些示例中,主服务器本地可以保存有第一ID列表,该第一ID列表中可以保存有主服务器生成的第二最大ID值。该第二最大ID值可以是由主服务器生成的历史最大的第一自增ID值。
具体的,主服务器每次接收到调用端发送的ID生成指令,都会生成一个第一自增ID值,在主服务器将每次生成的第一自增ID值发送至调用端后,可以在第一ID列表中存储一个最大的第一自增ID值,该最大的第一自增ID值,即第二最大ID值。
因此,主服务器可以从第一ID列表中获取到第二最大ID值。
当主服务器在通过自增序列生成第一自增ID值时,为了避免主服务器在每次故障排除后,从初始值开始生成第一自增ID值,可以在获取到第二最大ID值后,通过自增序列生成第一自增ID值,然后将生成的第一自增ID值发送至从服务器。
例如,假设第一ID列表中存储的第二最大ID值为“01121035”,则主服务器在获取到该第二最大ID值“01121035”后,可以生成基于该第二最大ID值“01121035”的第一自增ID值“01121036”,然后将该第一自增ID值“01121036”发送至从服务器。
相应的,在S240,当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端之后,本发明实施例的一种ID生成方法,还可以包括:
S250,将第一自增ID值作为第二最大ID值存储在第一ID列表中。
在一些示例中,为了保证主服务器在下次接收到调用端发送的ID生成指令后,从第一ID列表中获取到的第二最大ID值,是主服务器生成的最大的第一自增ID值,当主服务器将该第一自增ID值发送至调用端后,可以将该第一自增ID值作为第二最大ID值存储在第一ID列表中。
通过本发明实施例的一种ID生成方法,主服务器在生成第一自增ID值时,可以基于第一ID列表中存储的第二最大ID值,生成第一自增ID值,从而可以避免主服务器在故障排除后,从初始值开始生成第一自增ID值。
实施例四
在一些示例中,在设置一个从服务器后,当该从服务器出现故障时,主服务器无法将生成的第一自增ID值发送给该出现故障的从服务器,从而不能通过从服务器判断该第一自增ID值是否严格递增,为了避免该问题,在本发明实施例的一种可选的实施例中,可以设置两个从服务器,也就是说,从服务器包括第一从服务器和第二从服务器,因此,第一反馈信息可以包括第一子反馈信息和第二子反馈信息,第二反馈信息可以包括第三子反馈信息和第四子反馈信息。
当从服务器包括第一从服务器和第二从服务器时,在图2所示的一种ID生成方法的基础上,本发明实施例还提供了一种ID生成方法,如图6所示,为本发明实施例的一种ID生成方法应用于主服务器的第三种实施方式的流程图,在图6中,S220,通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器,可以包括:
S222,通过自增序列生成第一自增ID值,并将第一自增ID值发送至第一从服务器和第二从服务器。
具体的,当从服务器包括第一从服务器和第二从服务器时,则说明设置了两个从服务器,此时,主服务器可以将通过自增序列生成的第一自增ID值,分别发送至第一从服务器和第二从服务器,由第一从服务器和第二从服务器分别判断该第一自增ID值是否为严格递增。
第一从服务器在接收到主服务器发送的第一自增ID值后,可以根据第一从服务器本地保存的第一最大ID值判断该第一自增ID是否严格递增,并发送反馈信息至主服务器。
第二从服务器在接收到主服务器发送的第一自增ID值后,可以根据第二从服务器本地保存的第一最大ID值判断该第一自增ID值是否严格递增,并发送反馈信息至主服务器。因此,主服务器可以分别接收到第一从服务器发送的反馈信息和第二从服务器发送的反馈信息。
因此,S230,当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,可以包括:
S231,当接收到第一从服务器发送的第一子反馈信息时,获取第一子反馈信息中携带的第三最大ID值,并以第三最大ID值为自增序列的初始值;
或者,
当接收到第二从服务器发送的第二子反馈信息时,获取第二子反馈信息中携带的第四最大ID值,并以第四最大ID值为自增序列的初始值;
或者,
当接收到第一从服务器发送的第一子反馈信息和第二从服务器发送的第二子反馈信息时,选择第三最大ID值和第四最大ID值中,最大的ID值作为自增序列的初始值。
具体的,当主服务器接收到第一从服务器发送的反馈信息是第一子反馈信息,接收到第二从服务器发送的反馈信息是第四子反馈信息,或者未接收到第二从服务器发送的反馈信息时,则可以说明,主服务器发送给第一从服务器和第二从服务器的第一自增ID值不是严格递增的,因此,主服务器可以获取第一子反馈信息中携带的第三最大ID值,并以第三最大ID值为自增序列的初始值,重新执行步骤S222;该第三最大ID值为第一从服务器中保存的最大ID值。
当主服务器接收到第二从服务器发送的反馈信息是第二子反馈信息,接收到第一从服务器发送的反馈信息是第三子反馈信息,或者未接收到第一从服务器发送的反馈信息,也可以说明,主服务器发送给第一从服务器和第二从服务器的第一自增ID值不是严格递增的,因此,主服务器可以获取第二子反馈信息中携带的第四最大ID值,并以第四最大ID值为自增序列的初始值,重新执行步骤S222;该第四最大ID值为第二从服务器中保存的最大ID值。
当主服务器同时接收到第一从服务器发送的第一子反馈信息和第二从服务器发送的第二子反馈信息时,也可以说明,主服务器发送给第一从服务器和第二从服务器的第一自增ID值不是严格递增的。
但由于第一从服务器和第二从服务器都发送了反馈信息,为了保证再次生成的第一自增ID值是严格递增的,在本发明实施例中,主服务器可以在第三最大ID值和第四最大ID值中,选择最大的ID值作为自增序列的初始值,重新执行步骤S222。这样,可以保证主服务器再次生成第一自增ID值后,该再次生成的第一自增ID值是严格递增的。
相应的,S240,当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,包括:
S241,当接收到第一从服务器发送的第三子反馈信息和第二从服务器发送的第四子反馈信息时,将第一自增ID值发送至调用端。
其中,第三子反馈信息用于表示第一自增ID值大于第一从服务器中的第一最大ID值,第四子反馈信息用于表示第一自增ID值大于第二从服务器中的第一最大ID值。
具体的,当主服务器接收到第一从服务器发送的第三子反馈信息和第二从服务器发送的第四子反馈信息时,可以确定生成的第一自增ID值是严格递增的,则可以将该第一自增ID值发送至调用端。
在一些示例中,第一从服务器在接收到主服务器发送的第一自增ID值后,可以从第一从服务器本地保存的第一ID子列表中获取第三最大ID值;然后判断第一自增ID值是否大于第三最大ID值。
在第一自增ID值小于或等于第三最大ID值时,说明该第一自增ID值不是严格递增的,则可以发送携带有第三最大ID值的第一子反馈信息至主服务器。
在第一自增ID值大于第三最大ID值时,说明该第一自增ID值是严格递增的,则可以发送第三子反馈信息至主服务器。
在一些示例中,为了使得第一从服务器在后续接收到主服务器发送的自增ID值后,能够正确判断该自增ID值是否严格递增,第一从服务器可以将第一自增ID值作为第三最大ID值存储在第一ID子列表中。
因此,上述的主服务器可以接收到从服务器发送的第一子反馈信息或第三子反馈信息。
在一些示例中,第二从服务器在接收到主服务器发送的第一自增ID值后,可以从第二ID子列表中获取第四最大ID值;然后判断第一自增ID值是否大于第四最大ID值。
在第一自增ID值小于或等于第四最大ID值时,则说明该第一自增ID值不是严格递增的,可以发送携带有第四最大ID值的第二子反馈信息至主服务器。
在第一自增ID值大于第四最大ID值时,说明该第一自增ID值是严格递增的,则可以发送第四子反馈信息至主服务器。
在一些示例中,为了使得第二从服务器在后续接收到主服务器发送的自增ID值后,能够正确判断该自增ID值是否严格递增,第二从服务器可以将第一自增ID值作为第四最大ID值存储在第一ID子列表中。
实施例五
在本发明实施例的一种可选的实施例中,为了对主服务器发送的第一自增ID值和从服务器本地生成的自增ID值分别进行管理,可以在从服务器中设置两个列表,也即,对第二ID列表分别设置第三ID子列表和第四ID子列表,第三ID子列表中存储有第五最大ID值,第四ID子列表中存储有第六最大ID值。其中,该第五最大ID值为第一从服务器生成的自增ID值中最大的ID值,第六最大ID值为主服务器生成并发送至第一从服务器的自增ID值中最大的ID值。
当对第二ID列表分别设置第三ID子列表和第四ID子列表时,在图2所示的一种ID生成方法的基础上,本发明实施例还提供了一种ID生成方法,如图7所示,为本发明实施例的一种ID生成方法应用于从服务器的第二种实施方式的流程图,在图7中,S310,从第二ID列表中获取第一最大ID值,可以包括:
S311,从第三ID子列表中获取第五最大ID值,将第五最大ID值作为第一最大ID值。
在一些示例中,当主服务器发生故障时,由从服务器生成自增ID值,并发送至调用端,为了使得主服务器故障排除后,发送至调用端的自增ID值是严格递增的,可以将从服务器生成的最大的自增ID值存储在从服务器本地的第三ID子列表中,该最大的自增ID值为第五最大ID值。
因此,从服务器可以从本地保存的第三ID子列表中获取到第五最大ID值,然后将第五最大ID值作为第一最大ID值,从而可以通过后续步骤实现对第五最大ID值与第一自增ID值进行对比。
相应的,S340,将第一自增ID值作为第一最大ID值存储在第二ID列表中,包括:
S341,将第一自增ID值作为第六最大ID值存储在第四ID子列表中。
在一些示例中,从服务器在获取到第五最大ID值后,可以根据该第五最大ID值判断主服务器发送的第一自增ID值是否严格递增,当判断第一自增ID值严格递增后,可以发送第二反馈信息至主服务器,以使得主服务器将该第一自增ID值发送至调用端。
在一些示例中,第四ID子列表可以用于存储主服务器发送的最大的第一自增ID值。因此,从服务器可以将该第一自增ID值作为第六最大ID值存储在第四ID子列表中。
在一些示例中,当主服务器未出现故障时,产生并发送至从服务器的第一自增ID值是大于从服务器的第三ID子列表和第四ID子列表中存储的ID值的。
当主服务器出现故障,由从服务器产生自增ID值后,该产生的自增ID值存储在第三ID子列表中。因此,该第三ID子列表中存储的ID值可以大于第四ID子列表中存储的ID值。
当主服务器故障排除后,由主服务器继续产生自增ID值并发送至从服务器,此时,可能存在主服务器产生的自增ID值小于或等于第三ID子列表中存储的ID值的情况,当主服务器产生的自增ID值小于或等于第三ID子列表中存储的ID值时,也就是说,第一自增ID值小于或等于第五最大ID值,从服务器可以将该第五最大ID值发送至主服务器,主服务器以该第五最大ID值为初始值,重新生成第一自增ID值,再发送至从服务器。
此时,重新生成的第一自增ID值大于第三ID子列表中存储的ID值和第四ID子列表中存储的ID值。则从服务器可以发送第二反馈信息至主服务器,并将该重新生成的第一自增ID值存储在第四ID子列表中。
通过本发明实施例的一种ID生成方法,可以方便对主服务器发送至从服务器的第一自增ID值和从服务器本地生成的自增ID值的管理。
实施例六
在本发明实施例的一种可选的实施例中,在图7所示的一种ID生成方法的基础上,本发明实施例还提供了一种ID生成方法,如图8所示,为本发明实施例的一种ID生成方法应用于从服务器的第三种实施方式的流程图,在图8中,在S341,将第一自增ID值作为第六最大ID值存储在第四ID子列表中之后,本发明实施例的一种ID生成方法,还可以包括:
S342,在主服务器发生故障后,分别从第三ID子列表中获取第五最大ID值,从第四ID子列表中获取第六最大ID值。
其中,该第五最大ID值为第一从服务器生成的自增ID值中最大的ID值,第六最大ID值为主服务器生成并发送至第一从服务器的自增ID值中最大的ID值。
在一些示例中,当主服务器发生故障后,为了使得调用端能够获取到ID值,本发明实施例的一种ID生成方法可以通过从服务器生成ID值并发送至调用端,进一步的,为了使得从服务器生成的ID值是严格递增的,从服务器可以首先分别从第三ID子列表中获取第五最大ID值,从第四ID子列表中获取第六最大ID值。然后通过后续步骤对第五最大ID值和第六最大ID值进行对比,进而根据对比结果生成自增ID值。
S343,在对比第五最大ID值大于或等于第六最大ID值时,以第五最大ID值为初始值,通过自增序列生成第二自增ID值。
具体的,当从服务器获取到第五最大ID值和第六最大ID值后,可以对第五最大ID值和第六最大ID值进行对比,当对比第五最大ID值大于或等于第六最大ID值,则说明第三ID子列表中存储的ID值是从服务器本地保存的最大ID值,则可以以第五最大ID值为自增序列的初始值,然后通过自增序列生成第二自增ID值。
S344,在对比第五最大ID值小于第六最大ID值时,以第六最大ID值为初始值,通过自增序列生成第三自增ID值。
具体的,当从服务器获取到第五最大ID值和第六最大ID值后,可以对第五最大ID值和第六最大ID值进行对比,当对比第五最大ID值小于第六最大ID值,则说明第四ID子列表中存储的ID值是从服务器本地保存的最大ID值,则可以以第六最大ID值为自增序列的初始值,然后通过自增序列生成第三自增ID值。
S345,将第二自增ID值或第三自增ID值发送至调用端,并将第二自增ID值或第三自增ID值存储在第三ID子列表中。
当从服务器生成第二自增ID值或者生成第三自增ID值后,可以将该第二自增ID值或第三自增ID值发送至调用端。
进一步的,为了使得主服务器故障排除后,保证主服务器发送至调用端的ID值是严格递增的,从服务器可以将本地生成的第二自增ID值或第三自增ID值存储在第三ID子列表中,从而使得接收到主服务器发送的第一自增ID值后,可以正确判断该第一自增ID值是否严格递增。
通过本发明实施例的一种ID生成方法,不仅可以保证主服务发生故障后,调用端可以及时获取到ID值,还可以使得主服务器在故障排除后,生成并发送至调用端的ID值是严格递增的。
实施例七
在本发明实施例的一种可选的实施例中,可以在设置从服务器时,设置两个从服务器,也即,第一从服务器和第二从服务器,其中,第一从服务器用于在主服务器故障时,生成自增ID值,当设置两个从服务器时,可以在第一从服务器中保存有第一子列表子集和第三子列表子集,在第二从服务器中保存有第二子列表子集和第四子列表子集,第四子列表子集中存储有第九最大ID值,此时,第三ID子列表包括第一子列表子集和第二子列表子集,第四ID子列表,包括第三子列表子集和第四子列表子集。
对此,在图8所示的一种ID生成方法的基础上,本发明实施例还提供了一种ID生成方法,如图9所示,为本发明实施例的一种ID生成方法应用于从服务器的第四种实施方式的流程图,在图9中,S342~S344,分别从第三ID子列表中获取第五最大ID值,从第四ID子列表中获取第六最大ID值;在对比第五最大ID值大于或等于第六最大ID值时,以第五最大ID值为初始值,通过自增序列生成第二自增ID值;在对比第五最大ID值小于第六最大ID值时,以第六最大ID值为初始值,通过自增序列生成第三自增ID值;可以包括:
S3440,第一从服务器从第一子列表子集中获取第七最大ID值,从第三子列表子集中第八最大ID值,在对比第七最大ID值大于或等于第八最大ID值时,以第七最大ID值为初始值,通过自增序列生成第二自增ID值;在对比第七最大ID值小于第八最大ID值时,以第八最大ID值为初始值,通过自增序列生成第三自增ID值。
其中,该第七最大ID值为第一从服务器生成的自增ID值中最大的ID值,第八最大ID值为主服务器生成并发送至第一从服务器的自增ID值中最大的ID值。
具体的,当主服务器发生故障后,由第一从服务器生成自增ID值,为了保证第一从服务器生成的自增ID值是严格递增的,第一从服务器可以首先对第七最大ID值和第八最大ID值进行比较,然后选择第七最大ID值和第八最大ID值中最大的ID值为初始值,通过自增序列生成自增ID值。
在一些示例中,该第一子列表子集和第三子列表子集可以以列表的形式保存在第一从服务器中。
S3450,第一从服务器将第二自增ID值或第三自增ID值作为写入值发送至第二从服务器。
在一些示例中,当第一从服务器在生成自增ID值后,为了保证该生成的自增ID值是严格递增的,可以将该生成的自增ID值发送至第二从服务器,由第二从服务器判断该生成的自增ID值是否严格递增。
具体的,当第一从服务器可以将生成的第二自增ID值或第三自增ID值作为写入值发送至第二从服务器,以使得从服务器可以判断该第二自增ID值或第三自增ID值是否严格递增。
S3460,第二从服务器判断写入值是否大于第九最大ID值,若是,将写入值写入第二子列表子集中,并发送写入成功的反馈信息至第一从服务器。
其中,该第九最大ID值可以是主服务器生成并发送的自增ID值中的最大ID值。
具体的,当第二从服务器在接收到该写入值后,可以从第四子列表子集中获取第九最大ID值,然后判断该写入值是否大于第九最大ID值,若是,则说明该写入值是严格递增的,可以将该写入值写入第二子列表子集中,并返回写入成功的反馈信息至第一从服务器。
若否,则说明该写入值不是严格递增的,则可以发送携带有该第九最大ID值的反馈信息至第一从服务器,以使得从服务器以该第九最大ID值为自增序列的初始值,重新生成自增ID值。
从服务器在接收到携带有第九最大ID值的反馈信息后,可以以第九最大ID值为自增序列的初始值,通过自增序列生成第四自增ID值,然后将第四自增ID值发送至第二从服务器,由第二从服务器判断该第四自增ID值是否严格递增。
在一些示例中,该第二子列表子集和第四子列表子集可以以列表的形式保存在第二从服务器中。
相应的,S345,将第二自增ID值或第三自增ID值发送至调用端,并将第二自增ID值或第三自增ID值存储在第三ID子列表中,包括:
S3451,在第一从服务器接收到第二从服务器发送的写入成功的反馈信息后,将第二自增ID值或第三自增ID值发送至调用端,并将第二自增ID值或第三自增ID值存储在第三子列表子集中。
在一些示例中,当第二从服务器发送写入成功的反馈信息值第一从服务器后,第一从服务器可以接收到该写入成功的反馈信息,然后将第二自增ID值或第三自增ID值发送至调用端。
在一些示例中,为了保证第一从服务器再次生成的自增ID值是严格递增的,可以将该第二自增ID值或第三自增ID值作为第八最大ID值保存在第三子列表子集中,第一从服务器再次生成自增ID值时,可以从该第三子列表子集中获取保存的第八最大ID值,并以该第八最大ID值作为自增序列的初始值,通过自增序列再次生成自增ID值。
通过本发明实施例的一种ID生成方法,通过设置第一从服务器和第二从服务器,不仅可以保证在主服务器故障时,调用端可以获取到严格递增的ID值,而且,通过将第一从服务器生成的自增ID值保存到第二从服务器,还可以使得第一从服务器故障时,第二从服务器可以判断主服务器生成的自增ID值是否严格递增,从而使得调用端获取到的ID值总是严格递增的。
相应于上述的方法实施例,本发明实施例还提供了一种ID生成装置,如图10所示,为本发明实施例的一种应用于主服务器的ID生成装置的结构示意图,该装置应用于主服务器,在图10中,该装置可以包括:
第一接收模块1010,用于接收调用端发送的ID生成指令;
第一自增ID值生成模块1020,用于通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;
第二接收模块1030,用于当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,触发第一自增ID值生成模块;当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
通过本发明实施例提供的一种ID生成装置,主服务器在接收到调用端发送的ID生成指令后,可以通过预先设置在主服务器上的自增序列生成第一自增ID值,为了保证主服务器发送给调用端的ID值是严格递增的,主服务器可以将生成的第一自增ID值发送至从服务器,由从服务器判断该第一自增ID值是否严格递增,并发送反馈信息至主服务器,当主服务器接收到的是携带第一最大ID值的第一反馈信息中时,则说明主服务器生成的第一自增ID值不是严格递增的,则可以基于从服务器反馈的第一最大ID值,通过自增序列重新生成第一自增ID值,当主服务器接收到的是用于表示第一自增ID值大于从服务器本地保存的第一最大ID值的第二反馈信息时,则说明第一自增ID值是严格递增的,则可以将该第一最大ID值发送至调用端。可以使得主服务器发送至调用端的ID值总是严格递增的,从而解决了现有技术中生成的ID值不是严格递增的问题。并且,在主服务器故障排除后,可以快速生成严格递增的ID值,不需要将从服务器生成的所有ID值同步到主服务器。
具体的,主服务器本地保存有第一ID列表,第一ID列表中保存有主服务器生成的第二最大ID值,第一自增ID值生成模块1020,具体用于:
从第一ID列表中获取第二最大ID值,以第二最大ID值为自增序列的初始值,通过自增序列生成第一自增ID值;
相应的,本发明实施例的一种ID生成装置,还可以包括:
存储模块,用于将第一自增ID值作为第二最大ID值存储在第一ID列表中。
具体的,从服务器包括第一从服务器和第二从服务器,第一反馈信息包括第一子反馈信息和第二子反馈信息,第二反馈信息包括第三子反馈信息和第四子反馈信息;
第一自增ID值生成模块1020,具体用于:
通过自增序列生成第一自增ID值,并将第一自增ID值发送至第一从服务器和第二从服务器;
第二接收模块1030,具体用于:
当接收到第一从服务器发送的第一子反馈信息时,获取第一子反馈信息中携带的第三最大ID值,并以第三最大ID值为自增序列的初始值;
或者,当接收到第二从服务器发送的第二子反馈信息时,获取第二子反馈信息中携带的第四最大ID值,并以第四最大ID值为自增序列的初始值;
或者,当接收到第一从服务器发送的第一子反馈信息和第二从服务器发送的第二子反馈信息时,选择第三最大ID值和第四最大ID值中,最大的ID值作为自增序列的初始值;
第二接收模块1030,还具体用于:
当接收到第一从服务器发送的第三子反馈信息和第二从服务器发送的第四子反馈信息时,将第一自增ID值发送至调用端,第三子反馈信息用于表示第一自增ID值大于第一从服务器中的第一最大ID值,第四子反馈信息用于表示第一自增ID值大于第二从服务器中的第一最大ID值。
相应于上述的方法实施例,本发明实施例还提供了一种ID生成装置,如图11所示,为本发明实施例的一种应用于从服务器的ID生成装置的结构示意图,该装置应用于从服务器,从服务器本地保存有第二ID列表,第二ID列表中保存有第一最大ID值,在图11中,该装置可以包括:
接收模块1110,用于接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值;
判断模块1120,用于判断第一自增ID值是否大于第一最大ID值;
发送模块1130,用于在第一自增ID值小于或等于第一最大ID值时,发送携带有第一最大ID值的第一反馈信息至主服务器;在第一自增ID值大于第一最大ID值时,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
通过本发明实施例的一种ID生成装置,从服务器可以在接收到主服务器发送的第一自增ID值后,从本地保存的第二ID列表中获取第一最大ID值,然后通过判断第一自增ID值是否大于第一最大ID值,来判断第一自增ID值是否严格递增,在第一自增ID值小于或等于第一最大ID值时,则可以说明该第一自增ID值不是严格递增的,对此,从服务器可以将发送携带有第一最大ID值的第一反馈信息至主服务器,以使得主服务器基于该第一最大ID值重新生成第一自增ID值,以保证该重新生成的第一自增ID值是递增的,在第一自增ID值大于第一最大ID值时,则可以说明该第一自增ID值是严格递增的,则可以发送表示第一自增ID值大于第一最大ID值的第二反馈信息至主服务器,主服务器在接收到该表示第一自增ID值大于第一最大ID值的反馈信息后,可以确认该第一自增ID值是严格递增的,然后将该第一自增ID值发送至调用端。从而可以使得主服务器发送至调用端的ID值是严格递增的。
具体的,从服务器包括第一从服务器和第二从服务器,第二ID列表包括第一ID子列表和第二ID子列表,第一从服务器中保存有第一ID子列表,第二从服务器中保存有第二ID子列表;第一ID子列表中存储有第三最大ID值,第二ID子列表中存储有第四最大ID值;
第一从服务器的接收模块,用于接收主服务器发送的第一自增ID值,并从第一ID子列表中获取第三最大ID值;
第一从服务器的判断模块,用于判断第一自增ID值是否大于第三最大ID值;
第一从服务器的发送模块,用于在第一自增ID值小于或等于第三最大ID值时,发送携带有第三最大ID值的第一子反馈信息至主服务器;在第一自增ID值大于第三最大ID值时,发送第三子反馈信息至主服务器,并将第一自增ID值作为第三最大ID值存储在第一ID子列表中;
第二从服务器的接收模块,用于接收主服务器发送的第一自增ID值,并从第二ID子列表中获取第四最大ID值;
第二从服务器的判断模块,用于判断第一自增ID值是否大于第四最大ID值;
第二从服务器的发送模块,用于在第一自增ID值小于或等于第四最大ID值时,发送携带有第四最大ID值的第二子反馈信息至主服务器;在第一自增ID值大于第四最大ID值时,发送第四子反馈信息至主服务器,并将第一自增ID值作为第四最大ID值存储在第一ID子列表中。
具体的,第二ID列表包括:第三ID子列表和第四ID子列表,第三ID子列表中存储有第五最大ID值,第四ID子列表中存储有第六最大ID值,
接收模块1110,具体用于:从第三ID子列表中获取第五最大ID值;
发送模块1130,还具体用于:将第一自增ID值作为第六最大ID值存储在第四ID子列表中。
具体的,本发明实施例的一种ID生成装置,还可以包括:自增ID值生成模块,用于:
在主服务器发生故障后,分别从第三ID子列表中获取第五最大ID值,从第四ID子列表中获取第六最大ID值;
在对比第五最大ID值大于或等于第六最大ID值时,以第五最大ID值为初始值,通过自增序列生成第二自增ID值;
在对比第五最大ID值小于第六最大ID值时,以第六最大ID值为初始值,通过自增序列生成第三自增ID值;
发送模块1130,还具体用于将第二自增ID值或第三自增ID值发送至调用端,并将第二自增ID值或第三自增ID值存储在第三ID子列表中。
具体的,从服务器包括第一从服务器和第二从服务器,第三ID子列表包括第一子列表子集和第二子列表子集,第四ID子列表,包括第三子列表子集和第四子列表子集,第一子列表子集和第三子列表子集存储在第一从服务器,第二子列表子集和第四子列表子集存储在第二从服务器;第四子列表子集中存储有第九最大ID值;
自增ID值生成模块,具体用于:
从第一子列表子集中获取第七最大ID值,从第三子列表子集中获取第八最大ID值,在对比第七最大ID值大于或等于第八最大ID值时,以第七最大ID值为初始值,通过自增序列生成第二自增ID值;在对比第七最大ID值小于第八最大ID值时,以第八最大ID值为初始值,通过自增序列生成第三自增ID值;将第二自增ID值或第三自增ID值作为写入值发送至第二从服务器;
第二从服务器,用于判断写入值是否大于第九最大ID值,若是,将写入值写入第二子列表子集中,并发送写入成功的反馈信息至第一从服务器;若否,发送携带有第九最大ID值的反馈信息至第一从服务器;
发送模块1130,还具体用于:在第一从服务器接收到第二从服务器发送的写入成功的反馈信息后,将第二自增ID值或第三自增ID值发送至调用端,并将第二自增ID值或第三自增ID值存储在第三子列表子集中。
本发明实施例还提供了一种电子设备,如图12所示,该电子设备应用于主服务器,包括处理器1210、通信接口1220、存储器1230和通信总线1240,其中,处理器1210,通信接口1220,存储器1230通过通信总线1240完成相互间的通信,
存储器1230,用于存放计算机程序;
处理器1210,用于执行存储器1230上所存放的程序时,实现如下步骤:
接收调用端发送的ID生成指令;
通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;
当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,执行通过自增序列生成第一自增ID值的步骤;
当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
本发明实施例还提供了一种电子设备,如图13所示,该电子设备应用于从服务器,包括处理器1310、通信接口1320、存储器1330和通信总线1340,其中,处理器1310,通信接口1320,存储器1330通过通信总线1340完成相互间的通信,
存储器1330,用于存放计算机程序;
处理器1310,用于执行存储器1330上所存放的程序时,实现如下步骤:
接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值;
判断第一自增ID值是否大于第一最大ID值;
在第一自增ID值小于或等于第一最大ID值时,发送携带有第一最大ID值的第一反馈信息至主服务器;
在第一自增ID值大于第一最大ID值时,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的一种应用于主服务器的ID生成方法。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的一种应用于从服务器的ID生成方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的一种应用于主服务器的ID生成方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的一种应用于从服务器的ID生成方法。
在本发明提供的又一实施例中,本发明实施例还提供了一种ID生成系统,该系统可以是图1所示的ID生成系统,该系统可以包括:主服务器110和从服务器120,从服务器120本地保存有第二ID列表,第二ID列表中保存有第一最大ID值;
主服务器110,用于:接收调用端发送的ID生成指令;通过自增序列生成第一自增ID值,并将第一自增ID值发送至从服务器;
从服务器120,用于:接收主服务器发送的第一自增ID值,并从第二ID列表中获取第一最大ID值;判断第一自增ID值是否大于第一最大ID值;在第一自增ID值小于或等于第一最大ID值时,发送携带有第一最大ID值的第一反馈信息至主服务器;在第一自增ID值大于第一最大ID值时,发送第二反馈信息至主服务器,并将第一自增ID值作为第一最大ID值存储在第二ID列表中,其中,第二反馈信息用于表示第一自增ID值大于第一最大ID值;
主服务器110,还用于:当接收到从服务器发送的第一反馈信息时,获取第一反馈信息中携带的第一最大ID值,并以第一最大ID值为自增序列的初始值,触发主服务器执行通过自增序列生成第一自增ID值的步骤;
当接收到从服务器发送的第二反馈信息时,将第一自增ID值发送至调用端,第二反馈信息用于表示第一自增ID值大于第一最大ID值。
本发明实施例提供的一种ID生成系统,主服务器在接收到调用端发送的ID生成指令后,可以通过预先设置在主服务器上的自增序列生成第一自增ID值,为了保证主服务器发送给调用端的ID值是严格递增的,主服务器可以将生成的第一自增ID值发送至从服务器,由从服务器判断该第一自增ID值是否严格递增,并发送反馈信息至主服务器,当主服务器接收到的是携带第一最大ID值的第一反馈信息中时,则说明主服务器生成的第一自增ID值不是严格递增的,则可以基于从服务器反馈的第一最大ID值,通过自增序列重新生成第一自增ID值,当主服务器接收到的是用于表示第一自增ID值大于从服务器本地保存的第一最大ID值的第二反馈信息时,则说明第一自增ID值是严格递增的,则可以将该第一最大ID值发送至调用端。可以使得主服务器发送至调用端的ID值总是严格递增的,从而解决了现有技术中生成的ID值不是严格递增的问题,并且,在主服务器故障排除后,可以快速生成严格递增的ID值,不需要将从服务器生成的所有ID值同步到主服务器。提高了生成严格递增的ID值的效率。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (19)
1.一种ID生成方法,其特征在于,应用于主服务器,所述方法包括:
接收调用端发送的ID生成指令;
通过自增序列生成第一自增ID值,并将所述第一自增ID值发送至从服务器;
当接收到所述从服务器发送的第一反馈信息时,获取所述第一反馈信息中携带的第一最大ID值,并以所述第一最大ID值为所述自增序列的初始值,执行所述通过自增序列生成第一自增ID值的步骤;
当接收到所述从服务器发送的第二反馈信息时,将所述第一自增ID值发送至所述调用端,所述第二反馈信息用于表示所述第一自增ID值大于所述第一最大ID值。
2.根据权利要求1所述的方法,其特征在于,所述主服务器本地保存有第一ID列表,所述第一ID列表中保存有所述主服务器生成的第二最大ID值,所述通过自增序列生成第一自增ID值,包括:
从所述第一ID列表中获取所述第二最大ID值,以所述第二最大ID值为所述自增序列的初始值,通过所述自增序列生成第一自增ID值;
相应的,在所述当接收到所述从服务器发送的第二反馈信息时,将所述第一自增ID值发送至所述调用端之后,所述方法还包括:
将所述第一自增ID值作为所述第二最大ID值存储在所述第一ID列表中。
3.根据权利要求1所述的方法,其特征在于,所述从服务器包括第一从服务器和第二从服务器,所述第一反馈信息包括第一子反馈信息和第二子反馈信息,所述第二反馈信息包括第三子反馈信息和第四子反馈信息;
所述通过自增序列生成第一自增ID值,并将所述第一自增ID值发送至从服务器,包括:
通过所述自增序列生成第一自增ID值,并将所述第一自增ID值发送至所述第一从服务器和所述第二从服务器;
相应的,所述当接收到所述从服务器发送的第一反馈信息时,获取所述第一反馈信息中携带的第一最大ID值,并以所述第一最大ID值为所述自增序列的初始值,包括:
当接收到所述第一从服务器发送的第一子反馈信息时,获取所述第一子反馈信息中携带的第三最大ID值,并以所述第三最大ID值为所述自增序列的初始值;
或者,当接收到所述第二从服务器发送的第二子反馈信息时,获取所述第二子反馈信息中携带的第四最大ID值,并以所述第四最大ID值为所述自增序列的初始值;
或者,当接收到所述第一从服务器发送的第一子反馈信息和所述第二从服务器发送的第二子反馈信息时,选择所述第三最大ID值和所述第四最大ID值中,最大的ID值作为所述自增序列的初始值;
相应的,所述当接收到所述从服务器发送的第二反馈信息时,将所述第一自增ID值发送至所述调用端,包括:
当接收到所述第一从服务器发送的第三子反馈信息和所述第二从服务器发送的第四子反馈信息时,将所述第一自增ID值发送至所述调用端,所述第三子反馈信息用于表示所述第一自增ID值大于所述第一从服务器中的第一最大ID值,所述第四子反馈信息用于表示所述第一自增ID值大于所述第二从服务器中的第一最大ID值。
4.一种ID生成方法,其特征在于,应用于从服务器,所述从服务器本地保存有第二ID列表,所述第二ID列表中保存有第一最大ID值,所述方法包括:
接收主服务器发送的第一自增ID值,并从所述第二ID列表中获取所述第一最大ID值;
判断所述第一自增ID值是否大于所述第一最大ID值;
在所述第一自增ID值小于或等于所述第一最大ID值时,发送携带有所述第一最大ID值的第一反馈信息至所述主服务器;
在所述第一自增ID值大于所述第一最大ID值时,发送第二反馈信息至所述主服务器,并将所述第一自增ID值作为所述第一最大ID值存储在所述第二ID列表中,其中,所述第二反馈信息用于表示所述第一自增ID值大于所述第一最大ID值。
5.根据权利要求4所述的方法,其特征在于,所述从服务器包括第一从服务器和第二从服务器,所述第二ID列表包括第一ID子列表和第二ID子列表,所述第一从服务器中保存有所述第一ID子列表,所述第二从服务器中保存有所述第二ID子列表;所述第一ID子列表中存储有第三最大ID值,所述第二ID子列表中存储有第四最大ID值;
所述接收主服务器发送的第一自增ID值,并从所述第二ID列表中获取所述第一最大ID值;判断所述第一自增ID值是否大于所述第一最大ID值;在所述第一自增ID值小于或等于所述第一最大ID值时,发送携带有所述第一最大ID值的第一反馈信息至所述主服务器;在所述第一自增ID值大于所述第一最大ID值时,发送第二反馈信息至所述主服务器,并将所述第一自增ID值作为所述第一最大ID值存储在所述第二ID列表中,包括:
所述第一从服务器接收主服务器发送的第一自增ID值,并从所述第一ID子列表中获取所述第三最大ID值;判断所述第一自增ID值是否大于所述第三最大ID值;在所述第一自增ID值小于或等于所述第三最大ID值时,发送携带有所述第三最大ID值的第一子反馈信息至所述主服务器;在所述第一自增ID值大于所述第三最大ID值时,发送第三子反馈信息至所述主服务器,并将所述第一自增ID值作为所述第三最大ID值存储在所述第一ID子列表中;
所述第二从服务器接收主服务器发送的第一自增ID值,并从所述第二ID子列表中获取所述第四最大ID值;判断所述第一自增ID值是否大于所述第四最大ID值;在所述第一自增ID值小于或等于所述第四最大ID值时,发送携带有所述第四最大ID值的第二子反馈信息至所述主服务器;在所述第一自增ID值大于所述第四最大ID值时,发送第四子反馈信息至所述主服务器,并将所述第一自增ID值作为所述第四最大ID值存储在所述第一ID子列表中。
6.根据权利要求4所述的方法,其特征在于,所述第二ID列表包括:第三ID子列表和第四ID子列表,所述第三ID子列表中存储有第五最大ID值,所述第四ID子列表中存储有第六最大ID值,所述从所述第二ID列表中获取所述第一最大ID值,包括:
从所述第三ID子列表中获取所述第五最大ID值,并将所述第五最大ID值作为所述第一最大ID值;
相应的,所述将所述第一自增ID值作为所述第一最大ID值存储在所述第二ID列表中,包括:
将所述第一自增ID值作为所述第六最大ID值存储在所述第四ID子列表中。
7.根据权利要求6所述的方法,其特征在于,在所述将所述第一自增ID值作为所述第六最大ID值存储在所述第四ID子列表中之后,所述方法还包括:
在所述主服务器发生故障后,分别从所述第三ID子列表中获取第五最大ID值,从所述第四ID子列表中获取第六最大ID值;
在对比所述第五最大ID值大于或等于所述第六最大ID值时,以所述第五最大ID值为初始值,通过自增序列生成第二自增ID值;
在对比所述第五最大ID值小于所述第六最大ID值时,以所述第六最大ID值为初始值,通过自增序列生成第三自增ID值;
将所述第二自增ID值或所述第三自增ID值发送至调用端,并将所述第二自增ID值或所述第三自增ID值存储在所述第三ID子列表中。
8.根据权利要求7所述的方法,其特征在于,所述从服务器包括第一从服务器和第二从服务器,所述第三ID子列表包括第一子列表子集和第二子列表子集,所述第四ID子列表,包括第三子列表子集和第四子列表子集,所述第一子列表子集和所述第三子列表子集存储在所述第一从服务器,所述第二子列表子集和所述第四子列表子集存储在所述第二从服务器;所述第四子列表子集中存储有第九最大ID值;
所述分别从所述第三ID子列表中获取第五最大ID值,从所述第四ID子列表中获取第六最大ID值;在对比所述第五最大ID值大于或等于所述第六最大ID值时,以所述第五最大ID值为初始值,通过自增序列生成第二自增ID值;在对比所述第五最大ID值小于所述第六最大ID值时,以所述第六最大ID值为初始值,通过自增序列生成第三自增ID值;包括:
所述第一从服务器从所述第一子列表子集中获取第七最大ID值,从所述第三子列表子集中获取第八最大ID值,在对比所述第七最大ID值大于或等于所述第八最大ID值时,以所述第七最大ID值为初始值,通过自增序列生成第二自增ID值;在对比所述第七最大ID值小于所述第八最大ID值时,以所述第八最大ID值为初始值,通过自增序列生成第三自增ID值;
所述第一从服务器将所述第二自增ID值或所述第三自增ID值作为写入值发送至所述第二从服务器;
所述第二从服务器判断所述写入值是否大于所述第九最大ID值,若是,将所述写入值写入所述第二子列表子集中,并发送写入成功的反馈信息至所述第一从服务器;若否,发送携带有所述第九最大ID值的反馈信息至所述第一从服务器;
所述第一从服务器在接收到携带有所述第九最大ID值的反馈信息后,以所述第九最大ID值为所述自增序列的初始值,通过自增序列生成第四自增ID值,并将所述第四自增ID值发送至所述第二从服务器;
相应的,所述将所述第二自增ID值或所述第三自增ID值发送至调用端,并将所述第二自增ID值或所述第三自增ID值存储在所述第三ID子列表中包括:
在所述第一从服务器接收到所述第二从服务器发送的写入成功的反馈信息后,将所述第二自增ID值或所述第三自增ID值发送至调用端,并将所述第二自增ID值或所述第三自增ID值存储在第三子列表子集中。
9.一种ID生成装置,其特征在于,应用于主服务器,所述装置包括:
第一接收模块,用于接收调用端发送的ID生成指令;
第一自增ID值生成模块,用于通过自增序列生成第一自增ID值,并将所述第一自增ID值发送至从服务器;
第二接收模块,用于当接收到所述从服务器发送的第一反馈信息时,获取所述第一反馈信息中携带的第一最大ID值,并以所述第一最大ID值为所述自增序列的初始值,触发所述第一自增ID值生成模块;当接收到所述从服务器发送的第二反馈信息时,将所述第一自增ID值发送至所述调用端,所述第二反馈信息用于表示所述第一自增ID值大于所述第一最大ID值。
10.根据权利要求9所述的装置,其特征在于,所述主服务器本地保存有第一ID列表,所述第一ID列表中保存有所述主服务器生成的第二最大ID值,所述第一自增ID值生成模块,具体用于:
从所述第一ID列表中获取所述第二最大ID值,以所述第二最大ID值为所述自增序列的初始值,通过自增序列生成第一自增ID值;
相应的,所述装置还包括:
存储模块,用于将所述第一自增ID值作为所述第二最大ID值存储在所述第一ID列表中。
11.根据权利要求9所述的装置,其特征在于,所述从服务器包括第一从服务器和第二从服务器,所述第一反馈信息包括第一子反馈信息和第二子反馈信息,所述第二反馈信息包括第三子反馈信息和第四子反馈信息;
所述第一自增ID值生成模块,具体用于:
通过所述自增序列生成第一自增ID值,并将所述第一自增ID值发送至所述第一从服务器和所述第二从服务器;
所述第二接收模块,具体用于:
当接收到所述第一从服务器发送的第一子反馈信息时,获取所述第一子反馈信息中携带的第三最大ID值,并以所述第三最大ID值为所述自增序列的初始值;
或者,当接收到所述第二从服务器发送的第二子反馈信息时,获取所述第二子反馈信息中携带的第四最大ID值,并以所述第四最大ID值为所述自增序列的初始值;
或者,当接收到所述第一从服务器发送的第一子反馈信息和所述第二从服务器发送的第二子反馈信息时,选择所述第三最大ID值和所述第四最大ID值中,最大的ID值作为所述自增序列的初始值;
所述第二接收模块,还具体用于:
当接收到所述第一从服务器发送的第三子反馈信息和所述第二从服务器发送的第四子反馈信息时,将所述第一自增ID值发送至所述调用端,所述第三子反馈信息用于表示所述第一自增ID值大于所述第一从服务器中的第一最大ID值,所述第四子反馈信息用于表示所述第一自增ID值大于所述第二从服务器中的第一最大ID值。
12.一种ID生成装置,其特征在于,应用于从服务器,所述从服务器本地保存有第二ID列表,所述第二ID列表中保存有第一最大ID值,所述装置包括:
接收模块,用于接收主服务器发送的第一自增ID值,并从所述第二ID列表中获取所述第一最大ID值;
判断模块,用于判断所述第一自增ID值是否大于所述第一最大ID值;
发送模块,用于在所述第一自增ID值小于或等于所述第一最大ID值时,发送携带有所述第一最大ID值的第一反馈信息至所述主服务器;在所述第一自增ID值大于所述第一最大ID值时,发送第二反馈信息至所述主服务器,并将所述第一自增ID值作为所述第一最大ID值存储在所述第二ID列表中,其中,所述第二反馈信息用于表示所述第一自增ID值大于所述第一最大ID值。
13.根据权利要求12所述的装置,其特征在于,所述从服务器包括第一从服务器和第二从服务器,所述第二ID列表包括第一ID子列表和第二ID子列表,所述第一从服务器中保存有所述第一ID子列表,所述第二从服务器中保存有所述第二ID子列表;所述第一ID子列表中存储有第三最大ID值,所述第二ID子列表中存储有第四最大ID值;
所述第一从服务器的接收模块,用于接收主服务器发送的第一自增ID值,并从所述第一ID子列表中获取所述第三最大ID值;
所述第一从服务器的判断模块,用于判断所述第一自增ID值是否大于所述第三最大ID值;
所述第一从服务器的发送模块,用于在所述第一自增ID值小于或等于所述第三最大ID值时,发送携带有所述第三最大ID值的第一子反馈信息至所述主服务器;在所述第一自增ID值大于所述第三最大ID值时,发送第三子反馈信息至所述主服务器,并将所述第一自增ID值作为所述第三最大ID值存储在所述第一ID子列表中;
所述第二从服务器的接收模块,用于接收主服务器发送的第一自增ID值,并从所述第二ID子列表中获取所述第四最大ID值;
所述第二从服务器的判断模块,用于判断所述第一自增ID值是否大于所述第四最大ID值;
所述第二从服务器的发送模块,用于在所述第一自增ID值小于或等于所述第四最大ID值时,发送携带有所述第四最大ID值的第二子反馈信息至所述主服务器;在所述第一自增ID值大于所述第四最大ID值时,发送第四子反馈信息至所述主服务器,并将所述第一自增ID值作为所述第四最大ID值存储在所述第一ID子列表中。
14.根据权利要求12所述的装置,其特征在于,所述第二ID列表包括:第三ID子列表和第四ID子列表,所述第三ID子列表中存储有第五最大ID值,所述第四ID子列表中存储有第六最大ID值,
所述接收模块,具体用于:从所述第三ID子列表中获取所述第五最大ID值;
所述发送模块,还具体用于:将所述第一自增ID值作为所述第六最大ID值存储在所述第四ID子列表中。
15.根据权利要求14所述的装置,其特征在于,所述装置还包括:自增ID值生成模块,用于:
在所述主服务器发生故障后,分别从所述第三ID子列表中获取第五最大ID值,从所述第四ID子列表中获取第六最大ID值;
在对比所述第五最大ID值大于或等于所述第六最大ID值时,以所述第五最大ID值为初始值,通过自增序列生成第二自增ID值;
在对比所述第五最大ID值小于所述第六最大ID值时,以所述第六最大ID值为初始值,通过自增序列生成第三自增ID值;
所述发送模块,还具体用于将所述第二自增ID值或所述第三自增ID值发送至调用端,并将所述第二自增ID值或所述第三自增ID值存储在所述第三ID子列表中。
16.根据权利要求15所述的装置,其特征在于,所述从服务器包括第一从服务器和第二从服务器,所述第三ID子列表包括第一子列表子集和第二子列表子集,所述第四ID子列表,包括第三子列表子集和第四子列表子集,所述第一子列表子集和所述第三子列表子集存储在所述第一从服务器,所述第二子列表子集和所述第四子列表子集存储在所述第二从服务器;所述第四子列表子集中存储有第九最大ID值;
所述自增ID值生成模块,具体用于:
从所述第一子列表子集中获取第七最大ID值,从所述第三子列表子集中获取第八最大ID值,在对比所述第七最大ID值大于或等于所述第八最大ID值时,以所述第七最大ID值为初始值,通过自增序列生成第二自增ID值;在对比所述第七最大ID值小于所述第八最大ID值时,以所述第八最大ID值为初始值,通过自增序列生成第三自增ID值;将所述第二自增ID值或所述第三自增ID值作为写入值发送至所述第二从服务器;
所述第二从服务器,用于判断所述写入值是否大于所述第九最大ID值,若是,将所述写入值写入所述第二子列表子集中,并发送写入成功的反馈信息至所述第一从服务器;若否,发送携带有所述第九最大ID值的反馈信息至所述第一从服务器;
所述发送模块,还具体用于:在所述第一从服务器接收到所述第二从服务器发送的写入成功的反馈信息后,将所述第二自增ID值或所述第三自增ID值发送至调用端,并将所述第二自增ID值或所述第三自增ID值存储在第三子列表子集中。
17.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-3任一所述的方法步骤。
18.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求4-8任一所述的方法步骤。
19.一种ID生成系统,其特征在于,所述系统包括:主服务器和从服务器,所述从服务器本地保存有第二ID列表,所述第二ID列表中保存有第一最大ID值;
所述主服务器,用于:接收调用端发送的ID生成指令;通过自增序列生成第一自增ID值,并将所述第一自增ID值发送至从服务器;
所述从服务器,用于:接收主服务器发送的第一自增ID值,并从所述第二ID列表中获取所述第一最大ID值;判断所述第一自增ID值是否大于所述第一最大ID值;在所述第一自增ID值小于或等于所述第一最大ID值时,发送携带有所述第一最大ID值的第一反馈信息至所述主服务器;在所述第一自增ID值大于所述第一最大ID值时,发送第二反馈信息至所述主服务器,并将所述第一自增ID值作为所述第一最大ID值存储在所述第二ID列表中,其中,所述第二反馈信息用于表示所述第一自增ID值大于所述第一最大ID值;
所述主服务器,还用于:当接收到所述从服务器发送的第一反馈信息时,获取所述第一反馈信息中携带的第一最大ID值,并以所述第一最大ID值为所述自增序列的初始值,触发所述主服务器执行所述通过自增序列生成第一自增ID值的步骤;
当接收到所述从服务器发送的第二反馈信息时,将所述第一自增ID值发送至所述调用端,所述第二反馈信息用于表示所述第一自增ID值大于所述第一最大ID值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810599091.3A CN108846085B (zh) | 2018-06-12 | 2018-06-12 | 一种id生成方法、装置、电子设备及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810599091.3A CN108846085B (zh) | 2018-06-12 | 2018-06-12 | 一种id生成方法、装置、电子设备及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108846085A CN108846085A (zh) | 2018-11-20 |
CN108846085B true CN108846085B (zh) | 2021-11-05 |
Family
ID=64211637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810599091.3A Active CN108846085B (zh) | 2018-06-12 | 2018-06-12 | 一种id生成方法、装置、电子设备及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108846085B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113157249B (zh) * | 2021-04-22 | 2023-09-08 | 北京奇艺世纪科技有限公司 | 标识号生成方法、装置、电子设备及存储介质 |
CN114465697B (zh) * | 2022-04-11 | 2022-07-19 | 湖南戎腾网络科技有限公司 | 一种基于以太网的可靠通信方法、装置及设备 |
CN115361399B (zh) * | 2022-10-24 | 2023-01-24 | 中国水利水电第七工程局有限公司 | 一种多终端数据同步方法、装置及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100970391B1 (ko) * | 2005-04-19 | 2010-07-15 | 삼성전자주식회사 | 브로드 캐스트 암호화 시스템에서의 태그 형성방법 |
CN102769667B (zh) * | 2012-06-29 | 2015-01-28 | 北京奇虎科技有限公司 | 一种id生成方法、装置和系统 |
CN103647833A (zh) * | 2013-12-16 | 2014-03-19 | 百度在线网络技术(北京)有限公司 | 连续序号生成系统和方法 |
CN104809222B (zh) * | 2015-04-30 | 2018-04-10 | 北京奇艺世纪科技有限公司 | 一种id生成方法及装置 |
CN106899654B (zh) * | 2016-08-10 | 2020-02-07 | 阿里巴巴集团控股有限公司 | 一种序列值生成方法、装置及系统 |
CN107360224B (zh) * | 2017-07-07 | 2020-03-31 | 携程旅游信息技术(上海)有限公司 | 分布式系统中序列号生成方法、系统、设备及存储介质 |
-
2018
- 2018-06-12 CN CN201810599091.3A patent/CN108846085B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108846085A (zh) | 2018-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10020980B2 (en) | Arbitration processing method after cluster brain split, quorum storage apparatus, and system | |
US10108630B2 (en) | Cluster unique identifier | |
CN108846085B (zh) | 一种id生成方法、装置、电子设备及系统 | |
CN109308227B (zh) | 故障检测控制方法及相关设备 | |
CN109918261B (zh) | 故障监听方法、装置、设备及计算机可读存储介质 | |
CN110995513A (zh) | 物联网系统中的数据发送、接收方法、物联网设备及平台 | |
CN110554732A (zh) | 一种标识号生成方法、生成装置、电子设备及存储介质 | |
CN105426271A (zh) | 对分布式存储系统的锁管理的方法和装置 | |
CN111355600B (zh) | 一种主节点确定方法和装置 | |
CN107688489B (zh) | 一种调度任务的方法和系统 | |
CN110971702A (zh) | 服务调用方法、装置、计算机设备及存储介质 | |
CN111355765A (zh) | 一种网络请求的处理、发送方法及装置 | |
CN107040509B (zh) | 一种报文发送方法及装置 | |
CN106210159B (zh) | 一种域名解析方法和设备 | |
CN106559278B (zh) | 数据处理状态监控方法和装置 | |
US10951732B2 (en) | Service processing method and device | |
US10459816B2 (en) | Communication setting notification apparatus | |
CN112905322B (zh) | 资源加锁的方法、计算设备及计算机存储介质 | |
CN113923258A (zh) | 数据处理方法及数据处理系统 | |
US10489239B2 (en) | Multiplexing system, multiplexing method, and computer program product | |
CN114625702A (zh) | 数据的存储方法、装置、系统及电子设备 | |
US20190286599A1 (en) | Dual way communication method, system, and master device thereof | |
CN112596867A (zh) | 一种悬挂事务处理方法及一种分布式数据库系统 | |
CN107346273B (zh) | 一种数据恢复方法、装置及电子设备 | |
CN111639089B (zh) | 事务处理方法、装置、电子设备和计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |