CN109740120A - 分布式环境下唯一标识的生成方法、装置、计算机设备 - Google Patents
分布式环境下唯一标识的生成方法、装置、计算机设备 Download PDFInfo
- Publication number
- CN109740120A CN109740120A CN201811530494.9A CN201811530494A CN109740120A CN 109740120 A CN109740120 A CN 109740120A CN 201811530494 A CN201811530494 A CN 201811530494A CN 109740120 A CN109740120 A CN 109740120A
- Authority
- CN
- China
- Prior art keywords
- unique identification
- identification
- binary
- database
- bits
- 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 33
- 238000004590 computer program Methods 0.000 claims description 5
- 229910002056 binary alloy Inorganic materials 0.000 claims 1
- 230000000694 effects Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 235000013399 edible fruits Nutrition 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 241000533950 Leucojum Species 0.000 description 2
- 230000005012 migration Effects 0.000 description 2
- 238000013508 migration Methods 0.000 description 2
- VIKNJXKGJWUCNN-XGXHKTLJSA-N norethisterone Chemical compound O=C1CC[C@@H]2[C@H]3CC[C@](C)([C@](CC4)(O)C#C)[C@@H]4[C@@H]3CCC2=C1 VIKNJXKGJWUCNN-XGXHKTLJSA-N 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种分布式环境下唯一标识的生成方法,包括:基于生成唯一标识的请求生成二进制标识;将二进制标识转换为十进制标识;将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果;将替换结果确定为唯一标识并写入缓存及数据库中。本发明可解决现有技术中针对唯一标识的生成效果不理想的问题,可生成业务适应性更强且与所属业务紧密关联的唯一标识,以更好的满足业务需求。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种分布式环境下唯一标识的生成方法、装置、计算机设备。
背景技术
随着计算机技术的发展,分布式系统的应用越来越广泛。比如,在现有与贷款、理财等业务相关的系统中,都有大量的短信发送需求,在此种短信发送需求方为多个且短信发送数据量非常大的情况下,通常需要采用分布式系统以多个线程同时进行来完成。以上述系统发短信为例,由于系统通常需要记录每一条短信发送时所对应产生的唯一标识(ID),因此,在多个线程同时执行短信发送操作的情况下,该多个线程都需要申请生成每条短信对应的唯一标识,例如可采用现有Twitter分布式自增ID算法snowflake来生成唯一标识。
但是,现有方案中唯一标识的生成结果并不理想,至少存在如下问题:
第一,生成的标识位数过长,常常导致数据入库异常等,从而存在无法满足业务需求的情况;
第二,生成的标识无法与其所属业务相关联,从而无法满足业务需求或影响后续业务;
第三,在同一服务器中的多个线程同时申请生成唯一标识的情况下,服务器极可能为多个线程分配的唯一标识是重复的,也就是说,生成的唯一标识并不唯一,从而对后续业务造成影响。
相关技术中针对唯一标识的生成效果不理想的问题,目前尚未提出有效的解决方案。
发明内容
本发明的目的在于提供一种分布式环境下唯一标识的生成方法、装置、计算机设备及可读存储介质,进而在一定程度上克服上述现有技术中存在的问题,可生成业务适应性更强且与所属业务紧密关联的唯一标识,以更好的满足业务需求。
本发明是通过下述技术方案来解决上述技术问题:
根据本发明的一个方面,提供了一种分布式环境下唯一标识的生成方法,包括如下步骤:
S01,基于生成唯一标识的请求生成二进制标识;
S02,将二进制标识转换为十进制标识;
S03,将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果;
S04,将所述替换结果确定为唯一标识并写入缓存及数据库中。
进一步的,所述二进制标识占位64个比特,其中包括:1个比特的正位数、41个比特的时间戳、10个比特的工作机器标识及12个比特的序列号,其中,所述时间戳的单位为毫秒;
在S01基于生成唯一标识的请求生成二进制标识之后,还包括:
将所述二进制标识中的时间戳单位由毫秒调整为秒,将时间戳所占比特由41个比特调整为31个比特,将工作机器标识所占比特由10个比特调整为15个比特,将序列号所占比特由12个比特调整为17比特。
进一步的,在S01基于生成唯一标识的请求生成二进制标识之后,还包括:
判断当前时间是否小于上一次生成的二进制标识中时间戳所对应的时间;
若是,则判断当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔是否大于预置时间间隔阈值;
若是,则更换当前生成的二进制标识中的工作机器标识,以得到新的二进制标识;
若否,则在等待与预置时间间隔阈值相应的时间后,生成新的二进制标识。
进一步的,S04将所述替换结果确定为唯一标识并写入缓存及数据库中,包括:
判断所述唯一标识是否存在于缓存和/或数据库中;
若否,则判定所述唯一标识为有效的唯一标识;
将所述有效的唯一标识写入缓存及数据库中。
进一步的,S04将所述替换结果确定为唯一标识并写入缓存及数据库中,包括:
将所述替换结果转换为长整型,以生成长整型的唯一标识;
将所述长整型的唯一标识写入缓存及数据库中。
进一步的,所述方法还包括:预先确定数据库中需要分表的数量及每个分表的序号;
在S04将所述替换结果确定为唯一标识并写入缓存及数据库中之后,还包括:
计算所述唯一标识的哈希值;
对所述哈希值进行取模计算,并将计算结果作为分表序号;
根据分表序号将与所述唯一标识关联的数据写入对应的分表中。
进一步的,所述二进制标识中的序列号为每秒内的序列号;
所述方法还包括:控制跨秒时的序列号为从1到9之间随机选取。
为了实现上述目的,本发明还提供一种分布式环境下唯一标识的生成装置,包括:
二进制标识生成模块,用于基于生成唯一标识的请求生成二进制标识;
十进制标识生成模块,用于将二进制标识转换为十进制标识;
替换模块,用于将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果;
唯一标识确定模块,用于将所述替换结果确定为唯一标识并写入缓存及数据库中。
进一步的,所述二进制标识占位64个比特,其中包括:1个比特的正位数、41个比特的时间戳、10个比特的工作机器标识及12个比特的序列号,其中,所述时间戳的单位为毫秒。
基于此,所述二进制标识生成模块,还用于:
将所述二进制标识中的时间戳单位由毫秒调整为秒,将时间戳所占比特由41个比特调整为31个比特,将工作机器标识所占比特由10个比特调整为15个比特,将序列号所占比特由12个比特调整为17比特。
进一步的,所述二进制标识生成模块,具体包括:
第一判断单元,用于判断当前时间是否小于上一次生成的二进制标识中时间戳所对应的时间;
第二判断单元,用于在第一判断单元的判断结果为是时,判断当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔是否大于预置时间间隔阈值;
二进制标识生成单元,用于在第二判断单元的判断结果为是时,更换当前生成的二进制标识中的工作机器标识,以得到新的二进制标识;在第二判断单元的判断结果为否时,在等待与预置时间间隔阈值相应的时间后,生成新的二进制标识。
进一步的,所述唯一标识确定模块,具体包括:
第三判断单元,用于判断所述唯一标识是否存在于缓存和/或数据库中;
唯一标识判定单元,用于在第三判断单元的判断结果为否时,判定所述唯一标识为有效的唯一标识;
唯一标识写入单元,用于将所述有效的唯一标识写入缓存及数据库中。
进一步的,所述唯一标识确定模块,具体用于:
将所述替换结果转换为长整型,以生成长整型的唯一标识;
将所述整型的唯一标识写入缓存及数据库中。
进一步的,所述装置还包括:分表信息确定模块,用于预先确定数据库中需要分表的数量及每个分表的序号。
第一计算模块,用于计算所述唯一标识的哈希值;
第二计算模块,用于对所述哈希值进行取模计算,并将计算结果作为分表序号;
数据写入模块,用于根据分表序号将与所述唯一标识关联的数据写入对应的分表中。
进一步的,所述二进制标识中的序列号为每秒内的序列号;
所述装置还包括:序列号选取模块,用于控制跨秒时的序列号为从1到9之间随机选取。
为了实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。
为了实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述方法的步骤。
本发明提供的分布式环境下唯一标识的生成方法、装置、计算机设备及可读存储介质,可在基于生成唯一标识的请求而生成二进制标识后,将二进制标识转换为十进制标识,并将十进制标识中预置位置的值替换为代表预置业务标识的值,然后将完成替换操作后的十进制标识确定为唯一标识并写入缓存及数据库中。通过本方案,一方面,可解决现有方案生成的唯一标识位数过长而导致数据入库异常,进而影响后续业务或者无法满足业务需求的问题,可提升唯一标识的业务适用性,以尽可能满足更多的业务需求;另一方面,可通过唯一标识中预置位置的值,清晰区分出该唯一标识所属的业务,以解决现有方案无法区分唯一标识所属业务从而影响后续业务的问题,基于该与所属业务紧密关联的唯一标识,可为后续业务提供更大的便利性。
附图说明
图1是根据本发明实施例的分布式环境下唯一标识的生成方法的一种可选的流程示意图;
图2是根据本发明实施例的分布式环境下唯一标识的生成装置的一种可选的程序模块示意图;
图3是根据本发明实施例的分布式环境下唯一标识的生成装置的另一种可选的程序模块示意图;
图4是根据本发明实施例的分布式环境下唯一标识的生成装置的又一种可选的程序模块示意图;
图5是根据本发明实施例的计算机设备的一种可选的硬件架构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
下面结合附图对本发明提供的分布式环境下唯一标识的生成方法进行说明。
图1为本发明分布式环境下唯一标识的生成方法的一种可选的流程示意图,如图1所示,该方法可以包括以下步骤:
S01,基于生成唯一标识的请求生成二进制标识。
在本实施例中,本方案可应用于分布式环境下,比如,可通过分布式系统中的一个或多个线程发出生成唯一标识(ID)的请求。以现有与贷款、理财等业务相关的系统发送短信为例,在短信发送量较大时,通常需要利用多个线程同时执行短信发送操作,在此种情况下,该多个线程需要向服务器发出生成每条短信所对应的唯一标识的请求,当服务器接收到任一线程发出的生成唯一标识的请求后,可采用现有Twitter分布式自增ID算法snowflake来生成二进制标识,也即一个请求对应生成一个二进制标识。
在具体实现时,通过上述方式生成的二进制标识占位64个比特,其中包括:1个比特的正位数、41个比特的时间戳、10个比特的工作机器标识及12个比特的序列号,且该时间戳的单位为毫秒。
在本实施例中,在生成上述二进制标识之后,还可以对二进制标识进行调整,尤其是对二进制标识中与时间戳相关的内容进行调整,其中,可将二进制标识中的时间戳单位由毫秒(ms)调整为秒(s),将时间戳所占比特由41个比特调整为31个比特,相应的,还可将工作机器标识所占比特由10个比特调整为15个比特,将序列号所占比特由12个比特调整为17比特。
以此,通过对时间戳的单位及所占比特的调整,也就是将单位由毫秒调整为秒且占位更少的比特,可避免使用以毫秒为单位的时间戳所导致的浪费标识空间的问题,且可避免每毫秒重新计数而导致的时间浪费,以提高二进制标识生成的数量(比如每秒可支持生成约419万个二进制标识)及效率,进而提高后续唯一标识生成的数量及效率。同时,将时间戳节省下来的空间(所占比特)分配给工作机器标识及序列号,以使得工作机器标识及序列号所占的空间(比特)更多,以便更好的满足后续业务需求。
此外,生成上述二进制标识(可称为当前生成的二进制标识)之后,还可以判断当前时间是否小于上一次生成的二进制标识中时间戳所对应的时间。
如果判断结果为是,也就是说,当前时间小于上一次生成的二进制标识中时间戳所对应的时间,则说明系统时间回退过,通常是人为调整或服务器被攻击等原因而导致服务器中的系统时间被往回调了(也可称为时间回拨),在此种情况下,可进一步判断时间间隔(也即当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔)是否大于预置时间间隔阈值。在本实施例中,该时间间隔阈值可根据实际需要而预先设置,比如,可设置为15毫秒(ms),或者20毫秒(ms)等。
如果判断结果为是,也就是说,当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔,大于预置时间间隔阈值,则可更换当前生成的二进制标识中的工作机器标识,以得到新的二进制标识。以此,一方面,由于工作机器标识所占比特在前序步骤中已经调整为所占更多空间(比特),因此可具有更灵活及更充足的更换空间;另一方面,生成新的二进制标识,以避免由于时间回拨而导致生成重复的二进制标识的问题,以保证生成的二进制标识的唯一性,从而更好的保证在后续步骤中生成真正全局唯一的唯一标识。
如果判断结果为否,也就是说,当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔,不大于预置时间间隔阈值,则可在等待与预置时间间隔阈值相应的时间(比如15毫秒或20毫秒)后,也就是等待回拨的时间追上来之后,继续执行生成二进制标识的操作,以生成下一个(新的)二进制标识。
S02,将二进制标识转换为十进制标识。
在S01生成二进制标识之后,可将二进标识转换成十进制标识,也就是将占位为64位的标识转换为占位为18位的标识。
以此,可解决现有方案生成的唯一标识位数过长而可能导致数据入库异常,进而影响后续业务或者无法满足业务需求的问题,以提升唯一标识的业务适用性,尽可能满足更多的业务需求。
S03,将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果。
在本实施例中,可在S02生成十进制标识后,将十进制标识中某个位置的值以与业务标识相关的值进行替换,其中,可预先设置与业务标识相关的值比如可为0至9的数字,以每个数字代表不同的业务,如“1”代表贷款业务、“2”代表理财业务等;或者,也可预先设置与业务标识相关的值比如可为A至Z的字母,a-z的字母等,以每个字母代表不同的业务,如“B”代表贷款业务、“d”代表理财业务等。当然,可以根据实际需要设置与业务标识相关的值,在本实施例中对此并不做限定。
比如,可预先设定将十进制标识中的第二位替换为与业务标识相关的值(也可理解为代表某业务标识的值),以用于识别该十进制标识所属的业务。如,系统生成的某条短信所对应的十进制标识为“486484000286900224”,在此条短信所属贷款业务的情况下,可将该十进制标识的第二位的值(即“8”)替换为代表贷款业务标识的值(比如“1”),则替换结果为“416484000286900224”。
以此,可通过唯一标识中预置位置的值,清晰区分出该唯一标识所属的业务,以解决现有方案无法区分唯一标识所属业务从而影响后续业务的问题,基于该与所属业务紧密关联的唯一标识,可为后续业务提供更大的便利性。
S04,将替换结果确定为唯一标识并写入缓存及数据库中。
也就是说,可将S03中完成替换操作后的十进制标识确定为唯一标识,并分别写入缓存(在本实施例中,可为Redis缓存)及数据库中。以此,可保证即使由于缓存不稳定而导致数据丢失的情况下,仍然可从数据库中查找到唯一标识。
此外,在上述替换操作完成后,还可将替换后的十进制标识转换为长整型(Long型),以生成长整型的唯一标识,然后将长整型的唯一标识写入缓存及数据库中。
在具体实现时,将唯一标识写入缓存及数据库之前,还可先判断该唯一标识是否存在于缓存中,如果已经存在于缓存中(也即缓存中已经存储过该唯一标识了),则可舍弃该唯一标识,重新执行上述步骤生成新的唯一标识,以避免出现唯一标识重复的问题;如果不存在于缓存中(也即缓存中未存储过该唯一标识),则可进一步判断该唯一标识是否存在于数据库中。
如果已经存在于数据库中(也即数据库中已经存储过该唯一标识了),则可舍弃该唯一标识,重新执行上述步骤生成新的唯一标识,以避免出现唯一标识重复的问题;如果不存在于数据库中(也即数据库中未存储过该唯一标识),则说明该唯一标识是缓存及数据库中都不存在的唯一标识,即判定该唯一标识为有效的唯一标识。
然后,可执行将该有效的唯一标识写入缓存及数据库中的操作。
以此,可通过上述判断机制来判定生成的唯一标识是否为有效的唯一标识,一方面,分别基于缓存和数据库中的数据进行判断,以排除缓存和数据库中数据不一致时导致的误判,以提高判断结果的准确性;另一方面,可保证生成的唯一标识确实是全局唯一的,尤其适用于在分布式系统中请求并发的情况下,可生成更为有效且真正全局唯一的唯一标识,以避免生成的唯一标识重复而影响后续业务的问题,以更好的满足业务需求,保证业务的可持续进行。
在本实施例中,当数据量较大而产生分库分表需求时,还可将该唯一标识作为分库分表的依据,也就是说,可基于该唯一标识进行分库分表操作。
在具体实现时,可预先确定数据库中需要分表的数量及每个分表的序号,比如分表的数量为10张,序号为从1到10。
基于此,可先计算该唯一标识的哈希值(比如计算得到的哈希值为“-1615385569”),再对该哈希值进行取模计算(比如取模计算后的值为“9”),然后可设定将取模后的计算结果作为分表序号(即第9张分表),接下来,可根据分表序号将与唯一标识关联的数据写入对应的分表中,也即将唯一标识关联的数据写入到第9张分表中。
以此,基于唯一标识进行分库分表,可避免现有方案中根据用户ID等字段取模来分库分表而造成的数据分布不均、数据迁移或数据服务不可用时的数据查询不到或不准确等问题,不但可提高分库分表后数据分布的均匀性,还可有效解决数据迁移或数据服务不可用时的数据查询不到或不准确的问题,从而可得到更为准确且高效的查询结果。
此外,在上述步骤中生成二进制标识并对二进制标识进行调整后,调整后的二进制标识的序列号可为每秒内的序列号,基于此,可控制跨秒时的序列号为从1到9之间随机选取,以避免跨秒时序列号总是归零而使得序列号为0的二进制标识较多,进而导致后续生成的唯一标识在上述进行哈希及取模计算后得到的分表序号分布不均匀的问题,从而保证执行分库分表后的数据尽可能均匀的分配到不同的分表中。
根据本实施例的各个实施方式,可在基于生成唯一标识的请求而生成二进制标识后,将二进制标识转换为十进制标识,并将十进制标识中预置位置的值替换为代表预置业务标识的值,然后将完成替换操作后的十进制标识确定为唯一标识并写入缓存及数据库中。通过本方案,一方面,可解决现有方案生成的唯一标识位数过长而导致数据入库异常,进而影响后续业务或者无法满足业务需求的问题,可提升唯一标识的业务适用性,以尽可能满足更多的业务需求;另一方面,可通过唯一标识中预置位置的值,清晰区分出该唯一标识所属的业务,以解决现有方案无法区分唯一标识所属业务从而影响后续业务的问题,基于该与所属业务紧密关联的唯一标识,可为后续业务提供更大的便利性。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
实施例二
基于上述实施例一中提供的分布式环境下唯一标识的生成方法,本实施例中提供一种分布式环境下唯一标识的生成装置,具体地,图2至4示出了该分布式环境下唯一标识的生成装置的可选的结构框图,该分布式环境下唯一标识的生成装置被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明。本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合描述分布式环境下唯一标识的生成装置在存储介质中的执行过程,以下描述将具体介绍本实施例各程序模块的功能。
如图2所示,该分布式环境下唯一标识的生成装置20可包括:
二进制标识生成模块21,可用于基于生成唯一标识的请求生成二进制标识;
十进制标识生成模块22,可用于将二进制标识转换为十进制标识;
替换模块23,可用于将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果;
唯一标识确定模块24,可用于将替换结果确定为唯一标识并写入缓存及数据库中。
进一步的,生成的二进制标识占位64个比特,其中包括:1个比特的正位数、41个比特的时间戳、10个比特的工作机器标识及12个比特的序列号,其中,时间戳的单位为毫秒。
基于此,二进制标识生成模块21,还可用于:
将二进制标识中的时间戳单位由毫秒调整为秒,将时间戳所占比特由41个比特调整为31个比特,将工作机器标识所占比特由10个比特调整为15个比特,将序列号所占比特由12个比特调整为17比特。
进一步的,参看图3所示,二进制标识生成模块21,可具体包括:
第一判断单元211,可用于判断当前时间是否小于上一次生成的二进制标识中时间戳所对应的时间;
第二判断单元212,可用于在第一判断单元211的判断结果为是时,判断当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔是否大于预置时间间隔阈值;
二进制标识生成单元213,可用于在第二判断单元212的判断结果为是时,更换当前生成的二进制标识中的工作机器标识,以得到新的二进制标识;在第二判断单元212的判断结果为否时,在等待与预置时间间隔阈值相应的时间后,生成新的二进制标识。
进一步的,参看图4所示,唯一标识确定模块24,可具体包括:
第三判断单元241,可用于判断唯一标识是否存在于缓存和/或数据库中;
唯一标识判定单元242,可用于在第三判断单元241的判断结果为否时,判定唯一标识为有效的唯一标识;
唯一标识写入单元243,可用于将有效的唯一标识写入缓存及数据库中。
此外,唯一标识确定模块24,还可具体用于:
将替换结果转换为长整型,以生成长整型的唯一标识;
将长整型的唯一标识写入缓存及数据库中。
在具体实现时,该装置还可包括:
分表信息确定模块,可用于预先确定数据库中需要分表的数量及每个分表的序号。
第一计算模块,可用于计算唯一标识的哈希值;
第二计算单元模块,可用于对希值进行取模计算,并将计算结果作为分表序号;
数据写入模块,可用于根据分表序号将与唯一标识关联的数据写入对应的分表中。
进一步的,二进制标识中的序列号可为每秒内的序列号。
基于此,该装置还包括:序列号选取模块,可用于控制跨秒时的序列号为从1到9之间随机选取。
关于上述实施例中的装置,其中各个单元、模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
通过本实施例的各个实施方式,可在基于生成唯一标识的请求而生成二进制标识后,将二进制标识转换为十进制标识,并将十进制标识中预置位置的值替换为代表预置业务标识的值,然后将完成替换操作后的十进制标识确定为唯一标识并写入缓存及数据库中。通过本方案,一方面,可解决现有方案生成的唯一标识位数过长而导致数据入库异常,进而影响后续业务或者无法满足业务需求的问题,可提升唯一标识的业务适用性,以尽可能满足更多的业务需求;另一方面,可通过唯一标识中预置位置的值,清晰区分出该唯一标识所属的业务,以解决现有方案无法区分唯一标识所属业务从而影响后续业务的问题,基于该与所属业务紧密关联的唯一标识,可为后续业务提供更大的便利性。
实施例三
本实施例还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图5所示,本实施例的计算机设备50至少包括但不限于:可通过系统总线相互通信连接的存储器51、处理器52,如图5所示。需要指出的是,图5仅示出了具有组件51-52的计算机设备50,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器51(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器51可以是计算机设备50的内部存储单元,例如该计算机设备50的硬盘或内存。在另一些实施例中,存储器51也可以是计算机设备50的外部存储设备,例如该计算机设备50上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器51还可以既包括计算机设备50的内部存储单元也包括其外部存储设备。本实施例中,存储器51通常用于存储安装于计算机设备50的操作系统和各类应用软件,例如实施例二的分布式环境下唯一标识的生成装置的程序代码等。此外,存储器51还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器52在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器52通常用于控制计算机设备50的总体操作。本实施例中,处理器52用于运行存储器51中存储的程序代码或者处理数据,例如分布式环境下唯一标识的生成装置等。
实施例四
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于分布式环境下唯一标识的生成装置,被处理器执行时实现实施例一的分布式环境下唯一标识的生成方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (10)
1.一种分布式环境下唯一标识的生成方法,其特征在于,包括如下步骤:
S01,基于生成唯一标识的请求生成二进制标识;
S02,将二进制标识转换为十进制标识;
S03,将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果;
S04,将所述替换结果确定为唯一标识并写入缓存及数据库中。
2.根据权利要求1所述的分布式环境下唯一标识的生成方法,其特征在于,所述二进制标识占位64个比特,其中包括:1个比特的正位数、41个比特的时间戳、10个比特的工作机器标识及12个比特的序列号,其中,所述时间戳的单位为毫秒;
在S01基于生成唯一标识的请求生成二进制标识之后,还包括:
将所述二进制标识中的时间戳单位由毫秒调整为秒,将时间戳所占比特由41个比特调整为31个比特,将工作机器标识所占比特由10个比特调整为15个比特,将序列号所占比特由12个比特调整为17比特。
3.根据权利要求2所述的分布式环境下唯一标识的生成方法,其特征在于,在S01基于生成唯一标识的请求生成二进制标识之后,还包括:
判断当前时间是否小于上一次生成的二进制标识中时间戳所对应的时间;
若是,则判断当前时间与上一次生成的二进制标识中时间戳所对应的时间之间的时间间隔是否大于预置时间间隔阈值;
若是,则更换当前生成的二进制标识中的工作机器标识,以得到新的二进制标识;
若否,则在等待与预置时间间隔阈值相应的时间后,生成新的二进制标识。
4.根据权利要求1所述的分布式环境下唯一标识的生成方法,其特征在于,S04将所述替换结果确定为唯一标识并写入缓存及数据库中,包括:
判断所述唯一标识是否存在于缓存和/或数据库中;
若否,则判定所述唯一标识为有效的唯一标识;
将所述有效的唯一标识写入缓存及数据库中。
5.根据权利要求1所述的分布式环境下唯一标识的生成方法,其特征在于,S04将所述替换结果确定为唯一标识并写入缓存及数据库中,包括:
将所述替换结果转换为长整型,以生成长整型的唯一标识;
将所述长整型的唯一标识写入缓存及数据库中。
6.根据权利要求2所述的分布式环境下唯一标识的生成方法,其特征在于,还包括:预先确定数据库中需要分表的数量及每个分表的序号;
在S04将所述替换结果确定为唯一标识并写入缓存及数据库中之后,还包括:
计算所述唯一标识的哈希值;
对所述哈希值进行取模计算,并将计算结果作为分表序号;
根据分表序号将与所述唯一标识关联的数据写入对应的分表中。
7.根据权利要求6所述的分布式环境下唯一标识的生成方法,其特征在于,二进制标识中的序列号为每秒内的序列号;
所述方法还包括:控制跨秒时的序列号为从1到9之间随机选取。
8.一种分布式环境下唯一标识的生成装置,其特征在于,包括:
二进制标识生成模块,用于基于生成唯一标识的请求生成二进制标识;
十进制标识生成模块,用于将二进制标识转换为十进制标识;
替换模块,用于将十进制标识中预置位置的值替换为代表预置业务标识的值,得到替换结果;
唯一标识确定模块,用于将所述替换结果确定为唯一标识并写入缓存及数据库中。
9.一种计算机设备,所述计算机设备包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述程序被处理器执行时实现权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811530494.9A CN109740120A (zh) | 2018-12-14 | 2018-12-14 | 分布式环境下唯一标识的生成方法、装置、计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811530494.9A CN109740120A (zh) | 2018-12-14 | 2018-12-14 | 分布式环境下唯一标识的生成方法、装置、计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109740120A true CN109740120A (zh) | 2019-05-10 |
Family
ID=66358960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811530494.9A Pending CN109740120A (zh) | 2018-12-14 | 2018-12-14 | 分布式环境下唯一标识的生成方法、装置、计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109740120A (zh) |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110457335A (zh) * | 2019-08-09 | 2019-11-15 | 重庆紫光华山智安科技有限公司 | 一种身份标识生成方法、装置以及计算机可读存储介质 |
CN110490581A (zh) * | 2019-07-18 | 2019-11-22 | 拉货宝网络科技有限责任公司 | 一种分布式系统临界数据资源更新方法及系统 |
CN110543518A (zh) * | 2019-08-27 | 2019-12-06 | 北京奇艺世纪科技有限公司 | 一种分布式id生成方法、装置、设备及存储介质 |
CN110555078A (zh) * | 2019-09-02 | 2019-12-10 | 上海摩库数据技术有限公司 | 分布式id生成 |
CN110554732A (zh) * | 2019-08-22 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种标识号生成方法、生成装置、电子设备及存储介质 |
CN110830608A (zh) * | 2019-11-14 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 一种全局唯一标识符生成方法、装置、设备及存储介质 |
CN111083228A (zh) * | 2019-12-24 | 2020-04-28 | 腾讯云计算(北京)有限责任公司 | 标识号的生成方法、装置和电子设备 |
CN111078693A (zh) * | 2019-11-29 | 2020-04-28 | 叮当快药科技集团有限公司 | 用于生成数据库记录主键的方法和装置 |
CN111694845A (zh) * | 2020-05-29 | 2020-09-22 | 中国建设银行股份有限公司 | 一种基于Redis的标识生成方法和装置 |
CN111917897A (zh) * | 2020-07-15 | 2020-11-10 | 深圳市腾讯网域计算机网络有限公司 | 标识生成方法、装置、设备及存储介质 |
CN112035432A (zh) * | 2020-07-22 | 2020-12-04 | 大箴(杭州)科技有限公司 | 数据的置换迁移方法、装置计算机设备 |
CN112202938A (zh) * | 2020-10-12 | 2021-01-08 | 广州品唯软件有限公司 | Id生成方法、装置及系统 |
CN112243040A (zh) * | 2020-12-15 | 2021-01-19 | 广东睿江云计算股份有限公司 | 一种唯一标识符的生成方法及其系统 |
CN112445822A (zh) * | 2019-08-30 | 2021-03-05 | 拉扎斯网络科技(上海)有限公司 | 数据查询方法、装置、电子设备及计算机可读存储介质 |
CN112559558A (zh) * | 2020-12-07 | 2021-03-26 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN112988757A (zh) * | 2021-04-21 | 2021-06-18 | 杭州魔点科技有限公司 | 分布式系统全局唯一id生成方法、装置、设备和介质 |
CN113271342A (zh) * | 2021-04-27 | 2021-08-17 | 北京沃东天骏信息技术有限公司 | 一种信息处理方法及装置、存储介质 |
CN113742334A (zh) * | 2020-06-29 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 数据处理方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6363389B1 (en) * | 1998-09-24 | 2002-03-26 | International Business Machines Corporation | Technique for creating a unique quasi-random row identifier |
CN103823810A (zh) * | 2012-11-19 | 2014-05-28 | 中国电信股份有限公司 | 一种在分布式系统中生成唯一键的方法、装置及系统 |
CN105228140A (zh) * | 2015-08-31 | 2016-01-06 | 华为技术有限公司 | 一种数据访问方法及装置 |
CN108241715A (zh) * | 2016-12-27 | 2018-07-03 | 苏宁云商集团股份有限公司 | 一种分布式数据库主键生成方法及装置 |
CN108959386A (zh) * | 2018-05-31 | 2018-12-07 | 深圳壹账通智能科技有限公司 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
-
2018
- 2018-12-14 CN CN201811530494.9A patent/CN109740120A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6363389B1 (en) * | 1998-09-24 | 2002-03-26 | International Business Machines Corporation | Technique for creating a unique quasi-random row identifier |
CN103823810A (zh) * | 2012-11-19 | 2014-05-28 | 中国电信股份有限公司 | 一种在分布式系统中生成唯一键的方法、装置及系统 |
CN105228140A (zh) * | 2015-08-31 | 2016-01-06 | 华为技术有限公司 | 一种数据访问方法及装置 |
CN108241715A (zh) * | 2016-12-27 | 2018-07-03 | 苏宁云商集团股份有限公司 | 一种分布式数据库主键生成方法及装置 |
CN108959386A (zh) * | 2018-05-31 | 2018-12-07 | 深圳壹账通智能科技有限公司 | 分布式全局唯一id生成方法、装置、设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
刘炳元;: "一种基于比特数组的整型ID生成器算法", 福建电脑, no. 10, 25 October 2018 (2018-10-25) * |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110490581A (zh) * | 2019-07-18 | 2019-11-22 | 拉货宝网络科技有限责任公司 | 一种分布式系统临界数据资源更新方法及系统 |
CN110457335A (zh) * | 2019-08-09 | 2019-11-15 | 重庆紫光华山智安科技有限公司 | 一种身份标识生成方法、装置以及计算机可读存储介质 |
CN110554732A (zh) * | 2019-08-22 | 2019-12-10 | 北京奇艺世纪科技有限公司 | 一种标识号生成方法、生成装置、电子设备及存储介质 |
CN110543518A (zh) * | 2019-08-27 | 2019-12-06 | 北京奇艺世纪科技有限公司 | 一种分布式id生成方法、装置、设备及存储介质 |
CN112445822B (zh) * | 2019-08-30 | 2022-09-16 | 拉扎斯网络科技(上海)有限公司 | 数据查询方法、装置、电子设备及计算机可读存储介质 |
CN112445822A (zh) * | 2019-08-30 | 2021-03-05 | 拉扎斯网络科技(上海)有限公司 | 数据查询方法、装置、电子设备及计算机可读存储介质 |
CN110555078A (zh) * | 2019-09-02 | 2019-12-10 | 上海摩库数据技术有限公司 | 分布式id生成 |
CN110830608A (zh) * | 2019-11-14 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 一种全局唯一标识符生成方法、装置、设备及存储介质 |
CN110830608B (zh) * | 2019-11-14 | 2021-06-15 | 腾讯科技(深圳)有限公司 | 一种全局唯一标识符生成方法、装置、设备及存储介质 |
CN111078693A (zh) * | 2019-11-29 | 2020-04-28 | 叮当快药科技集团有限公司 | 用于生成数据库记录主键的方法和装置 |
CN111083228A (zh) * | 2019-12-24 | 2020-04-28 | 腾讯云计算(北京)有限责任公司 | 标识号的生成方法、装置和电子设备 |
CN111694845A (zh) * | 2020-05-29 | 2020-09-22 | 中国建设银行股份有限公司 | 一种基于Redis的标识生成方法和装置 |
CN113742334A (zh) * | 2020-06-29 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 数据处理方法和装置 |
CN111917897A (zh) * | 2020-07-15 | 2020-11-10 | 深圳市腾讯网域计算机网络有限公司 | 标识生成方法、装置、设备及存储介质 |
CN111917897B (zh) * | 2020-07-15 | 2024-03-05 | 深圳市腾讯网域计算机网络有限公司 | 标识生成方法、装置、设备及存储介质 |
CN112035432A (zh) * | 2020-07-22 | 2020-12-04 | 大箴(杭州)科技有限公司 | 数据的置换迁移方法、装置计算机设备 |
CN112035432B (zh) * | 2020-07-22 | 2024-02-23 | 大箴(杭州)科技有限公司 | 数据的置换迁移方法、装置计算机设备 |
CN112202938A (zh) * | 2020-10-12 | 2021-01-08 | 广州品唯软件有限公司 | Id生成方法、装置及系统 |
CN112559558B (zh) * | 2020-12-07 | 2024-04-09 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN112559558A (zh) * | 2020-12-07 | 2021-03-26 | 北京理房通支付科技有限公司 | 一种流水号生成方法和装置、计算设备和存储介质 |
CN112243040A (zh) * | 2020-12-15 | 2021-01-19 | 广东睿江云计算股份有限公司 | 一种唯一标识符的生成方法及其系统 |
CN112243040B (zh) * | 2020-12-15 | 2021-03-30 | 广东睿江云计算股份有限公司 | 一种唯一标识符的生成方法及其系统 |
CN112988757A (zh) * | 2021-04-21 | 2021-06-18 | 杭州魔点科技有限公司 | 分布式系统全局唯一id生成方法、装置、设备和介质 |
CN113271342B (zh) * | 2021-04-27 | 2023-03-07 | 北京沃东天骏信息技术有限公司 | 一种信息处理方法及装置、存储介质 |
CN113271342A (zh) * | 2021-04-27 | 2021-08-17 | 北京沃东天骏信息技术有限公司 | 一种信息处理方法及装置、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109740120A (zh) | 分布式环境下唯一标识的生成方法、装置、计算机设备 | |
US9274798B2 (en) | Multi-threaded logging | |
WO2019179026A1 (zh) | 电子装置、集群访问域名自动生成方法及存储介质 | |
CN110046029A (zh) | 应用于集群内多级缓存的数据处理方法和装置 | |
US20160283371A1 (en) | Non-intrusive storage of garbage collector-specific management data | |
CN108399175A (zh) | 一种数据存储、查询方法及其装置 | |
CN112053149A (zh) | 一种防止重复支付的方法、装置、电子设备和可读存储介质 | |
CN112445596A (zh) | 基于多线程的数据导入方法、系统及存储介质 | |
CN113722114A (zh) | 一种数据服务的处理方法、装置、计算设备及存储介质 | |
CN111752961A (zh) | 一种数据处理方法及装置 | |
CN111831639B (zh) | 一种全局唯一id生成方法及装置、车辆管理系统 | |
US11048557B2 (en) | Methods and modules relating to allocation of host machines | |
CN112612605B (zh) | 线程分配方法、装置、计算机设备和可读存储介质 | |
CN113946427A (zh) | 用于多操作系统的任务处理方法、处理器及存储介质 | |
CN111737274B (zh) | 交易数据的处理方法、装置和服务器 | |
CN114070847B (zh) | 服务器的限流方法、装置、设备及存储介质 | |
CN112788108A (zh) | 一种跨区块链分布式消息处理方法、平台及存储介质 | |
CN109040491B (zh) | 挂机行为处理方法、装置、计算机设备及存储介质 | |
CN109948994A (zh) | 一种即时通信方法、装置、计算机系统及可读存储介质 | |
CN112860746B (zh) | 一种基于缓存削减的方法、设备及系统 | |
CN113420050A (zh) | 数据查询管理方法、装置、计算机设备及可读存储介质 | |
CN113269625A (zh) | 一种工单处理方法及装置 | |
CN113467723A (zh) | 一种数据存储方法、装置、设备及介质 | |
CN112348665B (zh) | 账户对账方法、系统及装置 | |
CN111414162B (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 |