CN111680052A - 一种生成身份标识号的方法及装置 - Google Patents
一种生成身份标识号的方法及装置 Download PDFInfo
- Publication number
- CN111680052A CN111680052A CN202010489189.0A CN202010489189A CN111680052A CN 111680052 A CN111680052 A CN 111680052A CN 202010489189 A CN202010489189 A CN 202010489189A CN 111680052 A CN111680052 A CN 111680052A
- Authority
- CN
- China
- Prior art keywords
- generated
- current
- timestamp
- serial number
- critical resource
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000012545 processing Methods 0.000 claims description 34
- 230000015654 memory Effects 0.000 claims description 21
- 238000004590 computer program Methods 0.000 claims description 13
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 10
- 241000533950 Leucojum Species 0.000 description 9
- 230000006870 function Effects 0.000 description 6
- 239000000725 suspension Substances 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000004048 modification Effects 0.000 description 5
- 238000004891 communication Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 230000003936 working memory Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Images
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/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2322—Optimistic concurrency control using timestamps
-
- 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/21—Design, administration or maintenance of databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供了一种生成身份标识号的方法及装置,该方法包括获取待生成身份标识号ID的时间戳以及位于待生成ID之前的ID的临界资源值,临界资源值包括时间戳、序列号,在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳一致时,根据位于待生成ID之前的ID的序列号和待生成ID的时间戳,确定出当前ID以及当前ID对应的临界资源值,确定当前ID对应的临界资源值是否更新到临界资源库中,若是,则确认当前ID生成成功,可以解决现有技术中存在线程挂起的问题。
Description
技术领域
本发明实施例涉及金融科技(Finteh)领域,尤其涉及一种生成身份标识号的方法及装置。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融领域的复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。比如在某一银行的金融、支付等业务产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需求,此时一个能够生成全局唯一ID的系统是非常必要的。
现有技术是基于雪花算法生成分布式唯一ID,且生成的ID整体上是按照时间自增排序的。然而,在多线程的情况下,为了保证雪花算法所生成ID的唯一性,需要加锁保护临界资源,即加锁保护上次生成的ID所使用的毫秒级时间戳以及序列号,在给临界资源加锁时,线程若竞争失败就会被挂起,从而降低系统的性能,且在出现时钟回拨现象时,雪花算法虽然采用抛出异常并让系统调用方根据业务需求进行处理,或线程进入等待状态并直到时间恢复正常再继续生成ID,或不进行处理并容忍该段时钟回拨时间内生成的重复ID这些方式来处理出现时钟回拨现象,但这些处理方式无法兼顾系统的可用性也不能保证ID的全局唯一性,并会出现重复的ID。
综上,目前亟需一种生成身份标识号的方法,用以解决现有技术中存在线程挂起、出现时钟回拨现象的问题。
发明内容
本发明实施例提供了一种生成身份标识号的方法及装置,用以解决现有技术中存在线程挂起、出现时钟回拨现象的问题。
第一方面,本发明实施例提供了一种生成身份标识号的方法,包括:
获取待生成身份标识号ID的时间戳以及位于所述待生成ID之前的ID的临界资源值,所述临界资源值包括时间戳、序列号;
在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳一致时,根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID以及所述当前ID对应的临界资源值;
确定所述当前ID对应的临界资源值是否更新到临界资源库中;
若是,则确认所述当前ID生成成功。
上述技术方案中,通过根据系统的启动时间和运行时间可以确定出待生成身份标识号ID的时间戳,再在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳一致时,根据位于待生成ID之前的ID的序列号和待生成ID的时间戳,确定出当前ID以及当前ID对应的临界资源值,并在确定当前ID对应的临界资源值更新到临界资源库中时,确认当前ID生成成功。由于在多线程情况下采用一种无锁算法替代加锁,确定当前ID对应的临界资源值是否更新到临界资源库中,可以避免线程挂起,从而提高系统性能,并可确保ID的全局唯一性,进而可以解决现有技术中存在线程挂起的问题。
可选地,所述方法还包括:
在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳不一致时,重新设置所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID以及所述当前ID对应的临界资源值。
上述技术方案中,由于在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳不一致时,可以重新设置待生成ID的序列号,因此可以确保在同一时间戳内待生成ID的序列号从零开始递增,以使在同一时间戳内尽可能最多的生成序列号,再根据待生成ID的时间戳、序列号,确定出当前ID以及当前ID对应的临界资源值,从而可以确保当前ID的全局唯一性。
可选地,所述根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID,包括:
根据所述位于所述待生成ID之前的ID的序列号,确定出所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID。
上述技术方案中,通过根据位于待生成ID之前的ID的序列号,可以以递增的方式自动确定出待生成ID的序列号,再根据待生成ID的时间戳、序列号,确定出当前ID。
可选地,所述根据所述位于所述待生成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生成成功;
否则,将所述当前ID中的时钟回拨标识位设置为0,确认所述当前ID生成成功。
上述技术方案中,通过在确定待生成ID的时间戳发生时钟回拨时,将当前ID中的时钟回拨标识位设置为1,并记录时钟回拨之前生成的ID的时间戳,直至追回时钟回拨,再将当前ID中的时钟回拨标识位设置为0,确认当前ID生成成功,可以在发生时钟回拨的情况下依旧可以保障服务可用,且生成的ID全局唯一,并在同一毫秒内保持有序,避免生成重复的ID。
第二方面,本发明实施例还提供了一种生成身份标识号的装置,包括:
获取单元,用于获取待生成身份标识号ID的时间戳以及位于所述待生成ID之前的ID的临界资源值,所述临界资源值包括时间戳、序列号;
处理单元,用于在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳一致时,根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID以及所述当前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生成成功;
否则,将所述当前ID中的时钟回拨标识位设置为0,确认所述当前ID生成成功。
第三方面,本发明实施例提供一种计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行生成身份标识号的方法。
第四方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行生成身份标识号的方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统架构的示意图;
图2为本发明实施例提供的一种生成身份标识号的方法的流程示意图;
图3为本发明实施例提供的一种ID的结构示意图;
图4为本发明实施例提供的一种临界资源值的结构示意图;
图5为本发明实施例提供的一种带有时钟回拨标识位的ID的示意图;
图6为本发明实施例提供的另一种生成身份标识号的方法的流程示意图;
图7为本发明实施例提供的一种生成身份标识号的装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种系统架构。如图1所示,该系统架构可以为服务器100,包括处理器110、通信接口120和存储器130。
其中,通信接口120用于与终端设备进行通信,收发该终端设备传输的信息,实现通信。
处理器110是服务器100的控制中心,利用各种接口和线路连接整个服务器100的各个部分,通过运行或执行存储在存储器130内的软件程序/或模块,以及调用存储在存储器130内的数据,执行服务器100的各种功能和处理数据。可选地,处理器110可以包括一个或多个处理单元。
存储器130可用于存储软件程序以及模块,处理器110通过运行存储在存储器130的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器130可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据业务处理所创建的数据等。此外,存储器130可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
需要说明的是,上述图1所示的结构仅是一种示例,本发明实施例对此不做限定。
基于上述描述,图2示例性的示出了本发明实施例提供的一种生成身份标识号的方法的流程,该流程可以由生成身份标识号的装置执行。
如图2所示,该流程具体包括:
步骤201,获取待生成身份标识号ID的时间戳以及位于所述待生成ID之前的ID的临界资源值。
本发明实施例中,该待生成ID(identification,身份标识号)的时间戳是通过对系统的启动时间和系统的运行时间进行计算得到的,如此可以避免其在运行的过程中出受到服务器或本地时间校正的影响,从而避免出现时钟回拨现象,以确保ID的全局唯一性。此外,该临界资源值是指位于待生成ID之前的ID所使用的时间戳和序列号。
步骤202,在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳一致时,根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID以及所述当前ID对应的临界资源值。
本发明实施例中,在获取到待生成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的唯一性。因此,利用RuntimeMXBean(Java虚拟机运行时系统的管理接口)来获取Java虚拟机的启动时间和Java虚拟机的运行时间,并采用Java虚拟机的启动时间和Java虚拟机的运行时间来计算待生成ID的时间戳,从而可以避免时间戳在运行的过程中出受到服务器或本地时间校正的影响,进而可以避免出现时钟回拨现象,再判断待生成ID的时间戳与位于待生成ID之前的ID的时间戳是否一致,在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳一致时,将位于待生成ID之前的ID的序列号进行递增,确定出待生成ID的序列号,再根据待生成ID的时间戳、序列号,并按照雪花算法组成当前ID,ID的结构可以如图3所示,其中,ID是一个64位的long类型整数,图3中的1位用来表示标识位,因生成的ID一般使用正整数,而二进制中的最高位为1表示负数,因此该最高位固定为0;41位用来表示毫秒级的时间戳,41位的长度最长可以使用69年;10位用来表示工作节点的ID,包括5位的数据中心ID和5位的工作机器ID,最多可以表示1024个工作节点;12位用来表示序列号,记录同毫秒内所生成的序列号不同,一个工作节点一毫秒内最多可以生成4096个序列号。另外,在具体的应用上,由于数据中心ID和工作机器ID是确定的,因此应用雪花算法每次生成ID时,需要获取上一个生成的ID的时间戳和序列号,从而来判断是否发生时钟回拨现象以及计算本次的序列号,因此需要保护的临界资源值是上一次生成的ID所使用的时间戳和序列号。而本发明实施例是将41位的时间戳和12位的序列号组成整数,并由AtomicLong类型数据结构进行存储,AtomicLong数据类型的原子操作是通过CAS(CompareAnd Swap,比较并替换)算法实现的,从而保护了临界资源值“读-改-写”的原子性,因前41位为时间戳后12位为序列号,因此在需要取出时间戳或序列号时,利用位运算即可快速得到。其中,原子操作是指不会被线程调度机制打断的操作,即这种操作一旦开始,直到运行结束,中间不会有任何线程切换操作;临界资源值的结构可以如图4所示。
步骤203,确定所述当前ID对应的临界资源值是否更新到临界资源库中。
在本发明实施例中,在确定出当前ID以及当前ID对应的临界资源值后,确定当前ID对应的临界资源值是否更新到临界资源库中。具体地,在确定出当前ID对应的临界资源值后,利用CAS算法将临界资源库中的临界资源值更新为当前ID对应的临界资源值,并判断是否更新成功。其中,临界资源库可以为内存或存储器;CAS算法是一种无锁算法,CAS算法中有三个操作数,需要读写的内存位置V,进行比较的值A以及拟写入的新值B,当且仅当V的值等于A时,CAS算法才会通过原子方式用新值B来更新V的值,否则不会执行任何操作。由于CAS算法能检测到来自其他线程的干扰,因此即使不使用锁也能够实现原子的“读-改-写”操作序列。比如,线程X和线程Y同时更新同一变量C的值(比如5),由于线程X和线程Y都同时去访问同一变量C的值5,因此会将内存的值拷贝一份到自己的工作内存空间,即都将同一变量C的值5拷贝一份到自己的工作内存空间,因此线程X和线程Y的进行比较的值都为5,如果线程X在与线程Y的竞争中,线程X能去更新同一变量C的值5,而其他线程竞争失败(失败的线程不会被挂起,而是被告知这次竞争中失败,并可以再次发起尝试),线程X将同一变量C的值5更新为6,然后写入到内存中,此时对于线程Y来说,内存的值变为6,与进行比较的值5不一致,因此就会操作失败,但可以进行后续的竞争操作,如此可以确保不会生成同样的ID,从而确保ID的全局唯一性。
步骤204,若确定所述当前ID对应的临界资源值更新到临界资源库中,则确认所述当前ID生成成功。
在本发明实施例中,在确定当前ID对应的临界资源值更新到临界资源库中时,则确认当前ID生成成功;在确定当前ID对应的临界资源值未更新到临界资源库中时,继续获取下一待生成ID的时间戳。此外,当前ID设有时钟回拨标识位,确定待生成ID的时间戳是否发生时钟回拨,若待生成ID的时间戳发生时钟回拨,则将当前ID中的时钟回拨标识位设置为1,并记录时钟回拨之前生成的ID的时间戳,确认当前ID生成成功,若待生成ID的时间戳未发生时钟回拨时,将当前ID中的时钟回拨标识位设置为0,确认当前ID生成成功。其中,在发生时钟回拨现象时可以利用时钟回拨标识位来区别正常ID和异常ID,带有时钟回拨标识位的ID的示意图可以如图5所示,具体地,比如上次生成的一个全局唯一ID,假设为A,是20XX年XX月XX日十点0分0毫秒生成的,A的流水号可以写成1000000 0 XXXX,中间那个0表示为是否发生时钟回拨的标识位,XXXX表示为同一毫秒内递增的序列号,然而在生成新的全局唯一ID时发现获取的当前时间戳变成了九点,这个九点比上次生成的A的时间戳十点要小,那么就是发生了时钟回拨,中间的那个时钟回拨标识位就成了1。至于为什么变成1,是因为如果还是0的话,其实之前九点的时候,是可能已经生成了这个0900000 0 XXXX的序列号,因此为了保证生成的ID全局唯一,是需要把这个时钟回拨标识位变成1的,所以目前生成的ID应该是0900000 1 XXXX,记为序列号B。同时由于此时已经发生了时钟回拨,需要记录下时钟回拨前最后一个全局唯一ID的时间戳,也就是A的时间戳10点。在发生时钟回拨现象时,需要追回时钟回拨,以便保证生成的ID全局唯一,在发现发生时钟回拨现象后,此时系统的时间戳是九点,但生成A的时间戳是十点,如此可以知道正常生成的最后一个全局唯一ID的时间戳是十点。由于之前正常时也生成过九点到十点间的全局唯一ID,因此现在这个异常的九点到十点间,为了保证ID不是已经生成过的(也就是全局唯一),需要将这个异常时间段内的时钟回拨标识位都设置为1,在十点之后,由于在发生时钟回拨之前没有生成过十点之后的时间戳,则可以确认已经追回了这段异常的“九点-十点”的时间区间,然后可以将这个时钟回拨标识位恢复为0。其中,正常的时间段内的时钟回拨标识位都应该为0,在发生时钟回拨现象时,异常的时间段内的时钟回拨标识位都应该为1。
为了更好的解释本发明生成身份标识号的实施例,下面通过具体的实施场景描述本发明实施例提供的一种生成身份标识号的流程。
如图6所示,该流程包括以下步骤:
步骤601,获取待生成ID的时间戳。
根据系统的启动时间和系统的运行时间来计算待生成ID的时间戳。
步骤602,读取上次ID的临界资源值,得到上次ID的时间戳和序列号。
读取上次ID的临界资源值,利用位运算对临界资源值进行处理得到上次ID的时间戳和序列号。
步骤603,确定待生成ID的时间戳与上次ID的时间戳是否一致,若是,执行步骤604,若否,执行步骤605。
在获取到待生成ID的时间戳以及位于待生成ID之前的ID的时间戳后,判断待生成ID的时间戳与位于待生成ID之前的ID的时间戳是否一致。
步骤604,将上次ID的序列号递增,确定出待生成ID的序列号。
在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳一致时,将位于待生成ID之前的ID的序列号进行递增,确定出待生成ID的序列号。
步骤605,重新设置待生成ID的序列号。
在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳不一致时,重新设置待生成ID的序列号,即设置待生成ID的序列号为零,从零开始进行递增。
步骤606,按照雪花算法组成当前ID并确定出当前ID对应的临界资源值。
根据待生成ID的时间戳、序列号,按照雪花算法的形式构造出当前ID,并确定出当前ID对应的临界资源值。
步骤607,CAS算法更新临界资源库中的临界资源值是否成功,若是,执行步骤608,若否,执行步骤601。
在确定出当前ID对应的临界资源值后,判断CAS算法是否能成功将临界资源库中的临界资源值更新为当前ID对应的临界资源值。
步骤608,确认当前ID生成成功。
上述实施例表明,通过根据系统的启动时间和运行时间可以确定出待生成身份标识号ID的时间戳,由于系统的启动时间和运行时间是真实有效且不会倒回的,因此可以避免出现时钟回拨现象,从而可以避免生成重复的ID,再在确定待生成ID的时间戳与位于待生成ID之前的ID的时间戳一致时,根据位于待生成ID之前的ID的序列号和待生成ID的时间戳,确定出当前ID以及当前ID对应的临界资源值,并在确定当前ID对应的临界资源值更新到临界资源库中时,确认当前ID生成成功,由于在多线程情况下采用一种无锁算法替代加锁,确定当前ID对应的临界资源值是否更新到临界资源库中,可以避免线程挂起,从而提高系统性能,并可确保ID的全局唯一性,进而可以解决现有技术中存在线程挂起、出现时钟回拨现象的问题。
基于相同的技术构思,图7示例性的示出了本发明实施例提供的一种生成身份标识号的装置,该装置可以执行生成身份标识号的方法的流程。
如图7所示,该装置包括:
获取单元701,用于获取待生成身份标识号ID的时间戳以及位于所述待生成ID之前的ID的临界资源值,所述临界资源值包括时间戳、序列号;
处理单元702,用于在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳一致时,根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID以及所述当前ID对应的临界资源值;确定所述当前ID对应的临界资源值是否更新到临界资源库中;若是,则确认所述当前ID生成成功。
可选地,所述处理单元702还用于:
在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳不一致时,重新设置所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID以及所述当前ID对应的临界资源值。
可选地,所述处理单元702具体用于:
根据所述位于所述待生成ID之前的ID的序列号,确定出所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID。
可选地,所述处理单元702具体用于:
将所述位于所述待生成ID之前的ID的序列号进行递增,确定出所述待生成ID的序列号。
可选地,所述处理单元702还用于:
在确定所述当前ID对应的临界资源值未更新到临界资源库中时,继续获取下一待生成ID的时间戳。
可选地,所述处理单元702具体用于:
获取系统的启动时间和所述系统的运行时间;
根据所述系统的启动时间和所述系统的运行时间,确定出所述待生成ID的时间戳。
可选地,所述当前ID设有时钟回拨标识位;
所述处理单元702具体用于:
确定所述待生成ID的时间戳是否发生时钟回拨;
若是,则将所述当前ID中的时钟回拨标识位设置为1,并记录时钟回拨之前生成的ID的时间戳,确认所述当前ID生成成功;
否则,将所述当前ID中的时钟回拨标识位设置为0,确认所述当前ID生成成功。
基于相同的技术构思,本发明实施例提供一种计算设备,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行生成身份标识号的方法。
基于相同的技术构思,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行生成身份标识号的方法。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (16)
1.一种生成身份标识号的方法,其特征在于,包括:
获取待生成身份标识号ID的时间戳以及位于所述待生成ID之前的ID的临界资源值,所述临界资源值包括时间戳、序列号;
在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳一致时,根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID以及所述当前ID对应的临界资源值;
确定所述当前ID对应的临界资源值是否更新到临界资源库中;
若是,则确认所述当前ID生成成功。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳不一致时,重新设置所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID以及所述当前ID对应的临界资源值。
3.如权利要求1所述的方法,其特征在于,所述根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID,包括:
根据所述位于所述待生成ID之前的ID的序列号,确定出所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID。
4.如权利要求3所述的方法,其特征在于,所述根据所述位于所述待生成ID之前的ID的序列号,确定出所述待生成ID的序列号,包括:
将所述位于所述待生成ID之前的ID的序列号进行递增,确定出所述待生成ID的序列号。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
在确定所述当前ID对应的临界资源值未更新到临界资源库中时,继续获取下一待生成ID的时间戳。
6.如权利要求1至5任一项所述的方法,其特征在于,所述获取待生成身份标识号ID的时间戳,包括:
获取系统的启动时间和所述系统的运行时间;
根据所述系统的启动时间和所述系统的运行时间,确定出所述待生成ID的时间戳。
7.如权利要求1所述的方法,其特征在于,所述当前ID设有时钟回拨标识位;
所述确认所述当前ID生成成功,包括:
确定所述待生成ID的时间戳是否发生时钟回拨;
若是,则将所述当前ID中的时钟回拨标识位设置为1,并记录时钟回拨之前生成的ID的时间戳,确认所述当前ID生成成功;
否则,将所述当前ID中的时钟回拨标识位设置为0,确认所述当前ID生成成功。
8.一种生成身份标识号的装置,其特征在于,包括:
获取单元,用于获取待生成身份标识号ID的时间戳以及位于所述待生成ID之前的ID的临界资源值,所述临界资源值包括时间戳、序列号;
处理单元,用于在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳一致时,根据所述位于所述待生成ID之前的ID的序列号和所述待生成ID的时间戳,确定出当前ID以及所述当前ID对应的临界资源值;确定所述当前ID对应的临界资源值是否更新到临界资源库中;若是,则确认所述当前ID生成成功。
9.如权利要求8所述的装置,其特征在于,所述处理单元还用于:
在确定所述待生成ID的时间戳与位于所述待生成ID之前的ID的时间戳不一致时,重新设置所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID以及所述当前ID对应的临界资源值。
10.如权利要求8所述的装置,其特征在于,所述处理单元具体用于:
根据所述位于所述待生成ID之前的ID的序列号,确定出所述待生成ID的序列号;
根据所述待生成ID的时间戳、序列号,确定出所述当前ID。
11.如权利要求10所述的装置,其特征在于,所述处理单元具体用于:
将所述位于所述待生成ID之前的ID的序列号进行递增,确定出所述待生成ID的序列号。
12.如权利要求8所述的装置,其特征在于,所述处理单元还用于:
在确定所述当前ID对应的临界资源值未更新到临界资源库中时,继续获取下一待生成ID的时间戳。
13.如权利要求8至12任一项所述的装置,其特征在于,所述处理单元具体用于:
获取系统的启动时间和所述系统的运行时间;
根据所述系统的启动时间和所述系统的运行时间,确定出所述待生成ID的时间戳。
14.如权利要求8所述的装置,其特征在于,所述当前ID设有时钟回拨标识位;
所述处理单元具体用于:
确定所述待生成ID的时间戳是否发生时钟回拨;
若是,则将所述当前ID中的时钟回拨标识位设置为1,并记录时钟回拨之前生成的ID的时间戳,确认所述当前ID生成成功;
否则,将所述当前ID中的时钟回拨标识位设置为0,确认所述当前ID生成成功。
15.一种计算设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行权利要求1至7任一项所述的方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行程序,所述计算机可执行程序用于使计算机执行权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010489189.0A CN111680052A (zh) | 2020-06-02 | 2020-06-02 | 一种生成身份标识号的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010489189.0A CN111680052A (zh) | 2020-06-02 | 2020-06-02 | 一种生成身份标识号的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111680052A true CN111680052A (zh) | 2020-09-18 |
Family
ID=72453889
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010489189.0A Pending CN111680052A (zh) | 2020-06-02 | 2020-06-02 | 一种生成身份标识号的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111680052A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112182005A (zh) * | 2020-10-10 | 2021-01-05 | 中国银联股份有限公司 | 一种流水号生成方法及装置 |
CN112559558A (zh) * | 2020-12-07 | 2021-03-26 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN113806407A (zh) * | 2021-09-27 | 2021-12-17 | 武汉众邦银行股份有限公司 | 一种基于缓存批量获取订单号的方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023797A1 (en) * | 2008-07-25 | 2010-01-28 | Rajeev Atluri | Sequencing technique to account for a clock error in a backup system |
CN107229555A (zh) * | 2017-05-04 | 2017-10-03 | 北京小度信息科技有限公司 | 标识生成方法和装置 |
CN110554732A (zh) * | 2019-08-22 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种标识号生成方法、生成装置、电子设备及存储介质 |
-
2020
- 2020-06-02 CN CN202010489189.0A patent/CN111680052A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100023797A1 (en) * | 2008-07-25 | 2010-01-28 | Rajeev Atluri | Sequencing technique to account for a clock error in a backup system |
CN107229555A (zh) * | 2017-05-04 | 2017-10-03 | 北京小度信息科技有限公司 | 标识生成方法和装置 |
CN110554732A (zh) * | 2019-08-22 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种标识号生成方法、生成装置、电子设备及存储介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112182005A (zh) * | 2020-10-10 | 2021-01-05 | 中国银联股份有限公司 | 一种流水号生成方法及装置 |
CN112559558A (zh) * | 2020-12-07 | 2021-03-26 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN112559558B (zh) * | 2020-12-07 | 2024-04-09 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN113806407A (zh) * | 2021-09-27 | 2021-12-17 | 武汉众邦银行股份有限公司 | 一种基于缓存批量获取订单号的方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111680052A (zh) | 一种生成身份标识号的方法及装置 | |
US11611445B2 (en) | Changing smart contracts recorded in block chains | |
EP3472698B1 (en) | Fingerprinting of redundant threads using compiler-inserted transformation code | |
US9389907B2 (en) | System and method for providing a distributed transaction lock in a transactional middleware machine environment | |
CN112395050B (zh) | 一种虚拟机备份方法、装置、电子设备及可读存储介质 | |
CN114253673A (zh) | 一种分布式系统的事务处理方法和事务处理装置 | |
CN110648124B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN111125040A (zh) | 管理重做日志的方法、装置及存储介质 | |
CN111880956A (zh) | 一种数据同步方法和装置 | |
CN113946427A (zh) | 用于多操作系统的任务处理方法、处理器及存储介质 | |
CN113869902A (zh) | 一种区块链交易执行方法及装置 | |
US8473464B2 (en) | Method and device for data recovery using bit logging | |
CN116166196A (zh) | 一种分布式存储系统中存储池扩缩容恢复方法及装置 | |
CN112487010B (zh) | 一种区块链用户数据表更新方法、设备及存储介质 | |
CN114253720A (zh) | 多线程任务执行方法、装置、电子设备和存储介质 | |
CN113326266A (zh) | 一种基于表结构关系的数据同步方法及装置 | |
CN110941479B (zh) | 任务数据执行方法、服务器以及计算机存储介质 | |
CN114296996A (zh) | 一种基于有向无环图业务流程恢复的方法及装置 | |
CN114157717A (zh) | 一种微服务动态限流的系统及方法 | |
CN106055322A (zh) | 一种流程调度方法及装置 | |
CN111444214A (zh) | 一种大规模数据和工业监控内存数据库处理的方法及装置 | |
CN114661432A (zh) | 任务调度方法、装置、设备及存储介质 | |
CN118656204A (zh) | 分布式事务的处理方法和装置、设备和存储介质 | |
CN113486121B (zh) | 一种资源转移方法、装置及存储介质 | |
CN116756048B (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 |