CN115292314B - 序列号生成方法、装置、计算机设备和存储介质 - Google Patents
序列号生成方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN115292314B CN115292314B CN202210897574.8A CN202210897574A CN115292314B CN 115292314 B CN115292314 B CN 115292314B CN 202210897574 A CN202210897574 A CN 202210897574A CN 115292314 B CN115292314 B CN 115292314B
- Authority
- CN
- China
- Prior art keywords
- field
- value
- current value
- redis
- serial number
- 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
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000004044 response Effects 0.000 claims abstract description 49
- 238000004590 computer program Methods 0.000 claims description 25
- 230000008569 process Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 7
- 230000002688 persistence Effects 0.000 description 5
- 230000008901 benefit Effects 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 3
- 238000011084 recovery Methods 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种序列号生成方法、装置、计算机设备和存储介质。所述方法包括:接收序列号生成请求;向目标Redis发送取号请求;获取目标Redis对取号请求的响应结果;当响应结果包含序列号时,根据序列号响应序列号生成请求;序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。本申请实施例能够在序列号生成时兼顾高可靠性和高性能。
Description
技术领域
本申请涉及序列号生成领域,特别是涉及一种序列号生成方法、装置、计算机设备和存储介质。
背景技术
以下陈述仅提供与本申请有关的背景信息,而不必然地构成现有技术。
随着互联网的飞速发展,大规模、分布式应用系统逐渐成为软件系统的标配。在分布式系统中会存在许多台服务器对外提供服务,许多场景下都需要为服务器分配在系统全局内唯一的序列号,用来区分同一个服务请求具体是由哪台服务器来提供的服务,例如业务上的订单系统生成全局唯一订单号、技术上的分库分表系统生成全局唯一的数据库表主键等。
目前常用的序列号生成方式包括以下两种:
1、数据表列值生成方法,通常使用数据库(例如MySQL数据库)的行级锁来生成序列号。
2、Redis方法,通常使用Redis的指令的原子性和串行化进行序列号生成。
上述方法1的优点在于数据库的数据可靠性高,不会丢失数据,然而该方法的序列号生成性能较差。上述方法2的优点在于序列号的生成性能高,然而Redis在使用过程中可能存在故障或者丢失数据。
如何在序列号生成时兼顾高可靠性和高性能,成为亟需解决的问题。
发明内容
本申请针对上述不足或缺点,提供了一种序列号生成方法、装置、计算机设备和存储介质,本申请实施例能够在序列号生成时兼顾高可靠性和高性能。
本申请根据第一方面提供了一种序列号生成方法,在一个实施例中,该方法包括:
接收序列号生成请求;
向目标Redis发送取号请求;
获取目标Redis对取号请求的响应结果;
当响应结果包含序列号时,根据序列号响应序列号生成请求;序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;
当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。
在一个实施例中,第一字段和第二字段分别是设于目标Redis的当前序列号字段和最大序列号字段;第三字段是设于关系型数据库的最大序列号字段。
在一个实施例中,上述方法还包括:
当第一Redis设备的运行状态为不可用时,向关系型数据库请求第三字段的当前值;第一Redis设备是当前被启用为目标Redis的Redis设备;
根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,以及根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值;
启用第二Redis设备作为目标Redis。
在一个实施例中,根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值之后,重置后的第三字段的字段值等于重置前的第三字段的字段值与第二预设步长值的和,重置后的设于第二Redis设备的最大序列号字段的字段值等于重置后的第三字段的字段值;
根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,包括:将第三字段的当前值设置为第二Redis设备的当前序列号字段的字段值。
在一个实施例中,上述方法还包括:
向第一Redis设备多次发送取号请求;
当每次发送的取号请求均请求失败时,确定第一Redis设备的运行状态为不可用。
在一个实施例中,上述方法还包括:
计算目标Redis的序列号剩余量和序列号消耗速率;
根据序列号消耗速率计算未来第一时长的预估消耗量;
响应于未来第一时长的预估消耗量大于序列号剩余量,根据序列号消耗速率计算未来第二时长的预估消耗量,以及根据未来第二时长的预估消耗量依次重置第三字段的字段值与第二字段的字段值。
在一个实施例中,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,包括:
将第三字段的字段值重置为第三字段的当前值与第一预设步长值的和;
在重置第三字段的字段值之后,再次获取第三字段的当前值,并将第二字段的字段值重置为再次获取的第三字段的当前值。
本申请根据第二方面提供了一种序列号生成装置,在一个实施例中,该装置包括:
请求接收模块,用于接收序列号生成请求;
取号模块,用于向目标Redis发送取号请求;
结果获取模块,用于获取目标Redis对取号请求的响应结果;
请求响应模块,用于当响应结果包含序列号时,根据序列号响应序列号生成请求;序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;
重置模块,用于当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。
本申请根据第三方面提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一实施例中提供的序列号生成方法的步骤。
本申请根据第四方面提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例中提供的序列号生成方法的步骤。
在本申请的上述实施例中,序列号生成装置在接收序列号生成请求之后,向目标Redis发送取号请求;获取目标Redis对取号请求的响应结果之后,如果响应结果包含序列号,则根据序列号响应该序列号生成请求;其中,该序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;如果响应结果表示第一字段的当前值等于第二字段的当前值,则向关系型数据库请求第三字段的当前值,并根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,完成该重置操作后返回向目标Redis发送取号请求的步骤。本申请实施例使用Redis来生成序列号,同时利用关系型数据库来持久化Redis的最大序列号字段的字段值,通过结合关系型数据库的数据高可靠性和持久性,以及Redis的高性能来进行序列号生成,能够在序列号生成过程中保证数据不丢失,并且实现高可用以及高性能。
附图说明
图1为本申请根据一个或多个实施例提供的一种序列号生成方法的流程示意图;
图2为本申请根据一个或多个实施例提供的一种序列号生成方法的应用环境图;
图3为本申请根据一个或多个实施例提供的启用备用Redis设备的流程示意图;
图4为本申请根据一个或多个实施例提供的为目标Redis增加可生成的序列号数量的流程示意图;
图5为本申请根据一个或多个实施例提供的一种序列号生成装置的结构框图;
图6为本申请根据一个或多个实施例提供的计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
本申请提供了一种序列号生成方法。在一个实施例中,如图1所示,该序列号生成方法包括步骤S110-步骤S150,即:
步骤S110:接收序列号生成请求。
步骤S120:向目标Redis发送取号请求。
步骤S130:获取目标Redis对取号请求的响应结果。
步骤S140:当响应结果包含序列号时,根据序列号响应序列号生成请求。
步骤S150:当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。
下面对该方法进行说明。
将数据存于内存是Redis能实现高性能的一个重要原因,但与此同时,将数据存于内存的方式也存在一些不足,比如,部署Redis的机器如果突然出现断电或是宕机重启,那么存于内存中的数据均会丢失。尽管Redis支持数据持久化(指将内存的数据存入磁盘),然而,数据持久化为异步执行,异步执行的持久化会导致内存里的数据丢失后无法找回,比如,假设持久化的间隔为1秒,如果Redis机器出现断电或是突然宕机重启,那么磁盘会丢失掉1秒钟的数据。
为了兼顾Redis的高性能和关系型数据库(比如,可以是MySQL、Oracle、PostgreSql等数据库)的数据可靠性,本实施例使用Redis来生成序列号,同时利用关系型数据库来持久化Redis的最大序列号字段的字段值,通过结合关系型数据库的数据高可靠性和持久性,以及Redis的高性能来进行序列号生成,能够在序列号生成过程中保证数据不丢失,并且实现高可用以及高性能。
如图2所示,本实施例在目标Redis中设置第一字段(即当前序列号字段)和第二字段(即最大序列号字段),以及在关系型数据库设置第三字段(即最大序列号字段)。需要说明的是,目标Redis是指当前用于生成序列号的Redis设备,而不特指某台Redis设备。在实际应用中,可以设置多台Redis设备,如果当前启用为目标Redis的Redis设备出现故障而不可用,那么可以启用另一台Redis设备作为目标Redis,以继续生成序列号。其中,用于生成序列号的各台Redis设备中均可设置当前序列号字段和最大序列号字段。
进一步地,第二字段和第三字段的字段值会保持一致,通过关系型数据库对目标Redis中的最大序列号字段的字段值进行备份,能够在目标Redis出现故障或丢失数据时,基于第三字段的字段值来进行数据恢复,保证目标Redis的序列号数据不丢失。
关于序列号的生成过程,本实施例通过序列号生成装置来响应各序列号请求方(可以是一些需要序列号的业务系统)的序列号生成请求,序列号生成装置在接收到序列号生成请求之后,会向目标Redis发送取号请求。其中,序列号生成装置可以用服务器来实现,上面部署有用于实现本实施例提供的序列号生成方法的计算机程序。序列号生成装置和部署了目标Redis的服务器可以是同一服务器或不同服务器。
目标Redis在接收到取号请求之后,会获取第一字段的当前值和第二字段的当前值,比如,第一字段的当前值是5,第二字段的当前值是10,目标Redis接收到取号请求之后,就获取第一字段的当前值5以及第二字段的当前值10。
然后将二者进行对比,以确定第一字段的当前值和第二字段的当前值的大小关系。在对比时,目标Redis可以直接对比第一字段的当前值和第二字段的当前值的大小。在完成对比后,如果第一字段的当前值小于第二字段的当前值,那么目标Redis就根据第一字段的当前值生成序列号,比如,可以是自增第一字段的当前值得到序列号,通常是自增1,若第一字段的当前值在自增前是5,则自增后变为6。
可能地,在对比时,目标Redis还可以先自增第一字段的当前值,然后再将第二字段的当前值和自增后的第一字段的当前值进行对比,如果自增后的第一字段的当前值小于等于第二字段的当前值,则表示第一字段的当前值小于第二字段的当前值,如果自增后的第一字段的当前值大于第二字段的当前值,则表示第一字段的当前值大于第二字段的当前值。
如果第一字段的当前值小于第二字段的当前值,那么目标Redis会将生成的序列号作为响应结果发送给序列号生成装置。如果第一字段的当前值等于第二字段的当前值,那么目标Redis不会向序列号生成装置发送序列号,而是将指定数据(该指定数据本实施例不进行限定,只需预先约定好该指定数据用于表示第一字段的当前值等于第二字段的当前值即可)作为响应结果,发送给序列号生成装置。
序列号生成装置在接收到目标Redis对取号请求的响应结果后,检查响应结果中是否包含目标Redis生成的序列号,如果有,则根据该序列号来响应序列号请求方,比如,可以将序列号直接发送给序列号请求方,还可以根据业务需求,将该序列号拼接上该序列号请求方的唯一标识得到新的序列号(在新的序列号中,由目标Redis生成的序列号部分可以保证新的序列号具有全局唯一性,而通过唯一标识部分则可以识别出应用该序列号的业务系统),再将拼接得到的序列号发送给序列号请求方。
如果响应结果表示第一字段的当前值等于第二字段的当前值时,则向关系型数据库请求第三字段的当前值,并根据第三字段的当前值和第一预设步长值(该步长值为正整数,可以根据实际应用场景进行设置,比如设置为10000、50000等)依次重置第三字段的字段值与第二字段的字段值。
完成重置操作后,序列号生成装置再次向目标Redis发送取号请求,以及根据目标Redis的响应结果执行相关操作。
在一个实施例中,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,包括:将第三字段的字段值重置为第三字段的当前值与第一预设步长值的和;在重置第三字段的字段值之后,再次获取第三字段的当前值,并将第二字段的字段值重置为再次获取的第三字段的当前值。
考虑到在重置时,如果先重置目标Redis中的第二字段的字段值,那么后面在重置关系型数据库的第三字段的字段值时,如果和关系型数据库交互失败了,则关系型数据库和目标Redis的数据就失去同步。因此,本实施例在重置时,先重置第三字段的字段值,之后再将第二字段的字段值设置为第三字段的字段值,以使关系型数据库和目标Redis保持数据同步。
在一个实施例中,如图3所示,上述方法还包括:
步骤S210:当第一Redis设备的运行状态为不可用时,向关系型数据库请求第三字段的当前值。
其中,如果监控发现第一Redis设备持续不可用,则确定其运行状态为不可用。比如,可以向第一Redis设备多次发送取号请求,如果发现每次发送的取号请求均请求失败,那么就确定第一Redis设备的运行状态为不可用。
上述第一Redis设备是当前被启用为目标Redis的Redis设备。
步骤S220:根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,以及根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值。
其中,在根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值时,将第二Redis设备的当前序列号字段的字段值设置为第三字段的当前值,比如,第三字段的当前值是10000,那么就将第二Redis设备的当前序列号字段的字段值设置为10000。
而在根据第三字段的当前值和第二预设步长值(该步长值为正整数,可以根据实际需要设定,并且可以和上述的第一预设步长值相同或不同)依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值之后,重置后的第三字段的字段值等于重置前的第三字段的字段值与第二预设步长值的和,重置后的设于第二Redis设备的最大序列号字段的字段值等于重置后的第三字段的字段值。此外,在重置时,先重置关系型数据库中的第三字段的字段值,再重置第二Redis设备的最大序列号字段的字段值。
上述第二Redis设备是一个可用的备用Redis设备。
步骤S230:启用第二Redis设备作为目标Redis。
在本实施例中,设置一个或多个Redis设备作为备用的Redis设备,如果第一Redis设备(即当前启用的用于生成序列号的Redis设备)不可用了,那么可以基于关系型数据库中的第三字段的字段值来将序列号数据快速迁移到备用的Redis设备当中,进而保证序列号生成业务的高可用,尽可能减少因序列号生成业务中断而造成的不良影响。
在一个实施例中,如图4所示,上述方法还包括:
步骤S310:计算目标Redis的序列号剩余量和序列号消耗速率;
步骤S320:根据序列号消耗速率计算未来第一时长的预估消耗量;
步骤S330:响应于未来第一时长的预估消耗量大于序列号剩余量,根据序列号消耗速率计算未来第二时长的预估消耗量,以及根据未来第二时长的预估消耗量依次重置第三字段的字段值与第二字段的字段值。
上述的序列号剩余量等于第二字段的字段值减去第一字段的字段值,示例性地,假设第二字段的字段值为1000,第一字段的字段值为500,则序列号剩余量是500。
上述的序列号消耗速率表示在单位时长(可以根据实际需求设定,比如一分钟、30秒等)内目标Redis生成多少个序列号。计算过程可以是:序列号生成装置可以每隔单位时长扫描一次第一字段的字段值,把本次扫描到的第一字段的字段值和扫描时间记录在目标Redis(也可以记录在关系型数据库,又或是序列号生成装置的本地)。在完成两次扫描之后,可以基于以下公式计算出序列号消耗速率。
其中,V是序列号消耗速率,t1和t2分别是第一次和第二次的扫描时间,s1和s2分别是第一次和第二次扫描到的第一字段的字段值。
上述的未来第一时长可以是n个单位时长,未来第二时长可以是m个单位时长,其中,n和m均为正整数,且n<m。
未来第一时长的预估消耗量等于n*V,未来第一时长的预估消耗量m*V。
本实施例通过异步的形式,主动统计目标Redis的序列号剩余量、序列号消耗速率、以及未来第一时长和未来第二时长的预估消耗量,如果序列号剩余量小于未来第一时长(比如10分钟)的预估消耗量,那么就基于未来第二时长(比如20分钟)的预估消耗量来增加第二字段的字段值,从而保证目标redis可以不间断地为序列号生成装置提供服务。
需要说明的是,关于上述任何一个实施例中提供的序列号生成方法所包括的各个步骤,除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,这些步骤中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
基于相同的发明构思,本申请还提供了一种序列号生成装置。在本实施例中,如图5所示,该序列号生成装置包括以下模块:
请求接收模块110,用于接收序列号生成请求;
取号模块120,用于向目标Redis发送取号请求;
结果获取模块130,用于获取目标Redis对取号请求的响应结果;
请求响应模块140,用于当响应结果包含序列号时,根据序列号响应序列号生成请求;序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;
重置模块150,用于当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。
在一个实施例中,第一字段和第二字段分别是设于目标Redis的当前序列号字段和最大序列号字段;第三字段是设于关系型数据库的最大序列号字段。
在一个实施例中,上述装置还包括:
请求模块,用于当第一Redis设备的运行状态为不可用时,向关系型数据库请求第三字段的当前值;第一Redis设备是当前被启用为目标Redis的Redis设备;
恢复模块,用于根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,以及根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值;
启用模块,用于启用第二Redis设备作为目标Redis。
在一个实施例中,根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值之后,重置后的第三字段的字段值等于重置前的第三字段的字段值与第二预设步长值的和,重置后的设于第二Redis设备的最大序列号字段的字段值等于重置后的第三字段的字段值;
恢复模块根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值时,具体用于将第三字段的当前值设置为第二Redis设备的当前序列号字段的字段值。
在一个实施例中,取号模块120,还用于向第一Redis设备多次发送取号请求,当每次发送的取号请求均请求失败时,确定第一Redis设备的运行状态为不可用。
在一个实施例中,上述装置还包括:
第一计算模块,用于计算目标Redis的序列号剩余量和序列号消耗速率;
第二计算模块,用于根据序列号消耗速率计算未来第一时长的预估消耗量;
增号模块,用于响应于未来第一时长的预估消耗量大于序列号剩余量,根据序列号消耗速率计算未来第二时长的预估消耗量,以及根据未来第二时长的预估消耗量依次重置第三字段的字段值与第二字段的字段值。
在一个实施例中,重置模块150还用于将第三字段的字段值重置为第三字段的当前值与第一预设步长值的和;在重置第三字段的字段值之后,再次获取第三字段的当前值,并将第二字段的字段值重置为再次获取的第三字段的当前值。
关于序列号生成装置的具体限定可以参见上文中对于序列号生成方法的限定,在此不再赘述。上述序列号生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,其内部结构图可以如图6所示。
该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库具体存储的数据可以参见上述方法实施例中的限定。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种序列号生成方法。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
接收序列号生成请求;向目标Redis发送取号请求;获取目标Redis对取号请求的响应结果;当响应结果包含序列号时,根据序列号响应序列号生成请求;序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。
在一个实施方式中,处理器执行计算机程序,还实现以下步骤:
当第一Redis设备的运行状态为不可用时,向关系型数据库请求第三字段的当前值;第一Redis设备是当前被启用为目标Redis的Redis设备;根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,以及根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值;启用第二Redis设备作为目标Redis。
在一个实施方式中,根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值之后,重置后的第三字段的字段值等于重置前的第三字段的字段值与第二预设步长值的和,重置后的设于第二Redis设备的最大序列号字段的字段值等于重置后的第三字段的字段值。
在一个实施方式中,处理器执行计算机程序,实现根据所述第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值时,还实现以下步骤:将所述第三字段的当前值设置为第二Redis设备的当前序列号字段的字段值。
在一个实施方式中,处理器执行计算机程序,还实现以下步骤:
向第一Redis设备多次发送取号请求;当每次发送的取号请求均请求失败时,确定第一Redis设备的运行状态为不可用。
在一个实施方式中,处理器执行计算机程序,还实现以下步骤:
计算目标Redis的序列号剩余量和序列号消耗速率;根据序列号消耗速率计算未来第一时长的预估消耗量;响应于未来第一时长的预估消耗量大于序列号剩余量,根据序列号消耗速率计算未来第二时长的预估消耗量,以及根据未来第二时长的预估消耗量依次重置第三字段的字段值与第二字段的字段值。
在一个实施方式中,处理器执行计算机程序,实现根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,包括:
将第三字段的字段值重置为第三字段的当前值与第一预设步长值的和;在重置第三字段的字段值之后,再次获取第三字段的当前值,并将第二字段的字段值重置为再次获取的第三字段的当前值。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
接收序列号生成请求;向目标Redis发送取号请求;获取目标Redis对取号请求的响应结果;当响应结果包含序列号时,根据序列号响应序列号生成请求;序列号是目标Redis响应于取号请求,获取第一字段的当前值和第二字段的当前值,当第一字段的当前值不等于第二字段的当前值时,根据第一字段的当前值生成的;当响应结果表示第一字段的当前值等于第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,返回向目标Redis发送取号请求的步骤。
在一个实施方式中,计算机程序被处理器执行,还实现以下步骤:
当第一Redis设备的运行状态为不可用时,向关系型数据库请求第三字段的当前值;第一Redis设备是当前被启用为目标Redis的Redis设备;根据第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,以及根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值;启用第二Redis设备作为目标Redis。
在一个实施方式中,根据第三字段的当前值和第二预设步长值依次重置第三字段的字段值和设于第二Redis设备的最大序列号字段的字段值之后,重置后的第三字段的字段值等于重置前的第三字段的字段值与第二预设步长值的和,重置后的设于第二Redis设备的最大序列号字段的字段值等于重置后的第三字段的字段值。
在一个实施方式中,计算机程序被处理器执行,实现根据所述第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值时,还实现以下步骤:将所述第三字段的当前值设置为第二Redis设备的当前序列号字段的字段值。
在一个实施方式中,计算机程序被处理器执行,还实现以下步骤:
向第一Redis设备多次发送取号请求;当每次发送的取号请求均请求失败时,确定第一Redis设备的运行状态为不可用。
在一个实施方式中,计算机程序被处理器执行,还实现以下步骤:
计算目标Redis的序列号剩余量和序列号消耗速率;根据序列号消耗速率计算未来第一时长的预估消耗量;响应于未来第一时长的预估消耗量大于序列号剩余量,根据序列号消耗速率计算未来第二时长的预估消耗量,以及根据未来第二时长的预估消耗量依次重置第三字段的字段值与第二字段的字段值。
在一个实施方式中,计算机程序被处理器执行,根据第三字段的当前值和第一预设步长值依次重置第三字段的字段值与第二字段的字段值,包括:
将第三字段的字段值重置为第三字段的当前值与第一预设步长值的和;在重置第三字段的字段值之后,再次获取第三字段的当前值,并将第二字段的字段值重置为再次获取的第三字段的当前值。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
本领域普通技术人员可以理解实现上述方法实施例中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)、直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (7)
1.一种序列号生成方法,其特征在于,所述方法包括:
接收序列号生成请求;
向目标Redis发送取号请求;
获取所述目标Redis对所述取号请求的响应结果;
当所述响应结果包含序列号时,根据所述序列号响应所述序列号生成请求;所述序列号是所述目标Redis响应于所述取号请求,获取第一字段的当前值和第二字段的当前值,当所述第一字段的当前值不等于所述第二字段的当前值时,根据所述第一字段的当前值生成的;
当所述响应结果表示所述第一字段的当前值等于所述第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据所述第三字段的当前值和第一预设步长值依次重置所述第三字段的字段值与所述第二字段的字段值,返回所述向目标Redis发送取号请求的步骤;
所述方法还包括:当第一Redis设备的运行状态为不可用时,向所述关系型数据库请求第三字段的当前值;所述第一Redis设备是当前被启用为目标Redis的Redis设备;根据所述第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,以及根据所述第三字段的当前值和第二预设步长值依次重置所述第三字段的字段值和设于所述第二Redis设备的最大序列号字段的字段值;启用所述第二Redis设备作为目标Redis;
根据所述第三字段的当前值和第二预设步长值依次重置所述第三字段的字段值和设于所述第二Redis设备的最大序列号字段的字段值之后,重置后的所述第三字段的字段值等于重置前的所述第三字段的字段值与所述第二预设步长值的和,重置后的设于所述第二Redis设备的最大序列号字段的字段值等于重置后的所述第三字段的字段值;
根据所述第三字段的当前值设置设于第二Redis设备的当前序列号字段的字段值,包括:将所述第三字段的当前值设置为第二Redis设备的当前序列号字段的字段值;
所述方法还包括:向所述第一Redis设备多次发送取号请求;当每次发送的取号请求均请求失败时,确定所述第一Redis设备的运行状态为不可用。
2.如权利要求1所述的方法,其特征在于,所述第一字段和所述第二字段分别是设于目标Redis的当前序列号字段和最大序列号字段;所述第三字段是设于关系型数据库的最大序列号字段。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
计算所述目标Redis的序列号剩余量和序列号消耗速率;
根据所述序列号消耗速率计算未来第一时长的预估消耗量;
响应于所述未来第一时长的预估消耗量大于所述序列号剩余量,根据所述序列号消耗速率计算未来第二时长的预估消耗量,以及根据所述未来第二时长的预估消耗量依次重置所述第三字段的字段值与所述第二字段的字段值。
4.如权利要求1所述的方法,其特征在于,根据所述第三字段的当前值和第一预设步长值依次重置所述第三字段的字段值与所述第二字段的字段值,包括:
将所述第三字段的字段值重置为所述第三字段的当前值与第一预设步长值的和;
在重置所述第三字段的字段值之后,再次获取所述第三字段的当前值,并将所述第二字段的字段值重置为再次获取的所述第三字段的当前值。
5.一种用于实现如权利要求1所述的序列号生成方法的装置,其特征在于,所述装置包括:
请求接收模块,用于接收序列号生成请求;
取号模块,用于向目标Redis发送取号请求;
结果获取模块,用于获取所述目标Redis对所述取号请求的响应结果;
请求响应模块,用于当所述响应结果包含序列号时,根据所述序列号响应所述序列号生成请求;所述序列号是所述目标Redis响应于所述取号请求,获取第一字段的当前值和第二字段的当前值,当所述第一字段的当前值不等于所述第二字段的当前值时,根据所述第一字段的当前值生成的;
重置模块,用于当所述响应结果表示所述第一字段的当前值等于所述第二字段的当前值时,向关系型数据库请求第三字段的当前值,根据所述第三字段的当前值和第一预设步长值依次重置所述第三字段的字段值与所述第二字段的字段值,返回所述向目标Redis发送取号请求的步骤。
6.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4中任一项所述方法的步骤。
7.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210897574.8A CN115292314B (zh) | 2022-07-28 | 2022-07-28 | 序列号生成方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210897574.8A CN115292314B (zh) | 2022-07-28 | 2022-07-28 | 序列号生成方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115292314A CN115292314A (zh) | 2022-11-04 |
CN115292314B true CN115292314B (zh) | 2023-11-24 |
Family
ID=83824060
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210897574.8A Active CN115292314B (zh) | 2022-07-28 | 2022-07-28 | 序列号生成方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115292314B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106599104A (zh) * | 2016-11-29 | 2017-04-26 | 北京锐安科技有限公司 | 一种基于redis集群的海量数据关联方法 |
CN106649566A (zh) * | 2016-11-14 | 2017-05-10 | 上海艾融软件股份有限公司 | 一种序列号生成方法及装置 |
CN106874424A (zh) * | 2017-01-25 | 2017-06-20 | 杭州淘淘搜科技有限公司 | 一种基于MongoDB和Redis的网页数据采集处理方法及系统 |
CN107360224A (zh) * | 2017-07-07 | 2017-11-17 | 携程旅游信息技术(上海)有限公司 | 分布式系统中序列号生成方法、系统、设备及存储介质 |
WO2018209574A1 (zh) * | 2017-05-16 | 2018-11-22 | 深圳中兴力维技术有限公司 | 一种告警数据查询方法及装置 |
CN109165216A (zh) * | 2018-08-02 | 2019-01-08 | 杭州启博科技有限公司 | 一种Redis分布式数据库主键id的生成方法及系统、存储介质 |
CN110197424A (zh) * | 2019-05-31 | 2019-09-03 | 上海银行股份有限公司 | 基于Redis的对账平台系统 |
CN110417863A (zh) * | 2019-06-27 | 2019-11-05 | 华为技术有限公司 | 生成身份识别码的方法和装置、身份认证的方法和装置 |
CN112241407A (zh) * | 2020-09-11 | 2021-01-19 | 重庆锐云科技有限公司 | 高尔夫球场会员数据处理方法、客户管理系统及存储介质 |
CN113064903A (zh) * | 2021-04-25 | 2021-07-02 | 小马国炬(玉溪)科技有限公司 | 一种全局id生成方法、装置、设备及存储介质 |
CN113342851A (zh) * | 2021-05-28 | 2021-09-03 | 北京银行股份有限公司 | 序列扩容方法 |
CN114153893A (zh) * | 2021-11-02 | 2022-03-08 | 浪潮软件股份有限公司 | 基于Redis的分布式ID生成方法、装置及介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2918806A1 (en) * | 2015-01-22 | 2016-07-22 | Gubagoo Inc. | Systems and methods for call backup and takeover using web and mobile interfaces |
US10901819B1 (en) * | 2019-08-11 | 2021-01-26 | Paypal, Inc. | Distributed queueing over a Redis cluster |
-
2022
- 2022-07-28 CN CN202210897574.8A patent/CN115292314B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649566A (zh) * | 2016-11-14 | 2017-05-10 | 上海艾融软件股份有限公司 | 一种序列号生成方法及装置 |
CN106599104A (zh) * | 2016-11-29 | 2017-04-26 | 北京锐安科技有限公司 | 一种基于redis集群的海量数据关联方法 |
CN106874424A (zh) * | 2017-01-25 | 2017-06-20 | 杭州淘淘搜科技有限公司 | 一种基于MongoDB和Redis的网页数据采集处理方法及系统 |
WO2018209574A1 (zh) * | 2017-05-16 | 2018-11-22 | 深圳中兴力维技术有限公司 | 一种告警数据查询方法及装置 |
CN107360224A (zh) * | 2017-07-07 | 2017-11-17 | 携程旅游信息技术(上海)有限公司 | 分布式系统中序列号生成方法、系统、设备及存储介质 |
CN109165216A (zh) * | 2018-08-02 | 2019-01-08 | 杭州启博科技有限公司 | 一种Redis分布式数据库主键id的生成方法及系统、存储介质 |
CN110197424A (zh) * | 2019-05-31 | 2019-09-03 | 上海银行股份有限公司 | 基于Redis的对账平台系统 |
CN110417863A (zh) * | 2019-06-27 | 2019-11-05 | 华为技术有限公司 | 生成身份识别码的方法和装置、身份认证的方法和装置 |
CN112241407A (zh) * | 2020-09-11 | 2021-01-19 | 重庆锐云科技有限公司 | 高尔夫球场会员数据处理方法、客户管理系统及存储介质 |
CN113064903A (zh) * | 2021-04-25 | 2021-07-02 | 小马国炬(玉溪)科技有限公司 | 一种全局id生成方法、装置、设备及存储介质 |
CN113342851A (zh) * | 2021-05-28 | 2021-09-03 | 北京银行股份有限公司 | 序列扩容方法 |
CN114153893A (zh) * | 2021-11-02 | 2022-03-08 | 浪潮软件股份有限公司 | 基于Redis的分布式ID生成方法、装置及介质 |
Non-Patent Citations (1)
Title |
---|
基于Redis的分布式数据存储方法;宋云奎等;《计算机产品与流通》;106 * |
Also Published As
Publication number | Publication date |
---|---|
CN115292314A (zh) | 2022-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108322533B (zh) | 基于操作日志的分布式集群节点间配置同步方法 | |
CN110555041A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN109460438A (zh) | 消息数据存储方法、装置、计算机设备和存储介质 | |
US10990312B2 (en) | Method, apparatus, device and storage medium for processing data location of storage device | |
CN111708775B (zh) | 自增id生成方法、装置及系统 | |
CN107203437B (zh) | 防止内存数据丢失的方法、装置和系统 | |
CN108418859B (zh) | 写数据的方法和装置 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN111309548A (zh) | 一种超时监控方法、装置及计算机可读存储介质 | |
CN115292314B (zh) | 序列号生成方法、装置、计算机设备和存储介质 | |
CN108241616B (zh) | 消息推送方法和装置 | |
WO2021012562A1 (zh) | 区块链数据清理方法、装置、计算机设备和存储介质 | |
CN115314361B (zh) | 一种服务器集群管理方法及其相关组件 | |
CN116303795A (zh) | 数据同步方法、装置、电子设备、介质及产品 | |
US20200236244A1 (en) | Information processing system and apparatus and non-transitory computer readable medium | |
CN111104294A (zh) | 一种生成bmc日志的方法及装置 | |
US20240195893A1 (en) | User data disaster tolerance method, device, network element device and storage medium | |
CN115357429A (zh) | 恢复数据文件的方法、装置和客户端 | |
CN115114112A (zh) | 数据同步方法及装置 | |
CN113626240A (zh) | 集群故障恢复方法、装置、计算机设备和存储介质 | |
CN111338848B (zh) | 故障应用副本处理方法、装置、计算机设备和存储介质 | |
US10489239B2 (en) | Multiplexing system, multiplexing method, and computer program product | |
CN112860702A (zh) | 试验执行工单验证方法、装置、计算机设备和存储介质 | |
CN110633147B (zh) | 一种操作系统进程管理的方法及装置 | |
CN110647526B (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 |