一种短链接生成方法、装置、设备及存储介质与流程

文档序号:26589582发布日期:2021-09-10 20:28阅读:89来源:国知局
一种短链接生成方法、装置、设备及存储介质与流程

1.本技术涉及短链接处理领域,涉及但不限于一种短链接生成方法、装置、设备及存储介质。


背景技术:

2.电子商务公司之间的竞争日趋激烈化,为了简化内容界面和提升用户体验,电子商务公司通常会将长链接转换成短链接。
3.目前,电子商务公司通常是采用信息摘要算法(message

digest algorithm,md5)对加密串进行分段截取,然后结合移位操作和取模运算来将长链接转换成短链接,由于将长链接转换成短链接的流程较长,因此,现有技术中的短链接的生成速度慢。


技术实现要素:

4.本技术实施例为解决相关技术中存在的至少一个问题而提供一种短链接生成方法、装置、设备及存储介质,能够提高短链接的生成速度。
5.本技术的技术方案是这样实现的:
6.第一方面,本技术实施例提供一种短链接生成方法,所述方法包括:
7.获取目标号段;所述目标号段的最小值与所述目标号段的前一个号段的最大值相同,所述目标号段的最大值与所述目标号段的后一个号段的最小值相同,所述目标号段包括第一数量的号码;
8.对所述目标号段的最小值和最大值进行扩展,得到扩展后的目标号段,所述扩展后的目标号段包括第二数量的号码,所述第二数量大于所述第一数量;
9.从所述第二数量的号码中确定目标号码;
10.对所述目标号码进行转换,确定短链接。
11.第二方面,本技术实施例提供一种短链接生成装置,所述装置包括:
12.获取单元,用于获取目标号段;所述目标号段的最小值与所述目标号段的前一个号段的最大值相同,所述目标号段的最大值与所述目标号段的后一个号段的最小值相同,所述目标号段包括第一数量的号码;
13.处理单元,用于对对所述目标号段的最小值和最大值进行扩展,得到扩展后的目标号段,所述扩展后的目标号段包括第二数量的号码,所述第二数量大于所述第一数量;
14.确定单元,用于从所述第二数量的号码中确定目标号码;
15.所述确定单元,还用于对所述目标号码进行转换,确定短链接。
16.第三方面,本技术实施例提供一种电子设备,存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述短链接生成方法。
17.第四方面,本技术实施例提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述短链接生成方法。
18.本技术实施例提供了一种短链接生成方法、装置、设备及存储介质,获取目标号段,所述目标号段的最小值与所述目标号段的前一个号段的最大值相同,所述目标号段的最大值与所述目标号段的后一个号段的最小值相同,所述目标号段包括第一数量的号码;对所述目标号段的最小值和最大值进行扩展,得到第二数量的号码;从所述第二数量的号码中确定目标号码;对所述目标号码进行转换,确定短链接。这样,在确定短链接的过程中,由于可以先从多个号段中确定目标号段,再从目标号段中确定一个目标号码,对该目标号码进行转换,确定短链接,因此,可以直接对目标号码进行转换,确定短链接,不需要再通过繁琐的步骤将长链接转换为短链接了,从而可以缩短链接的生成流程,进而可以提高短链接的生成速度。
附图说明
19.图1为本技术实施例提供的一种短链接生成系统;
20.图2为本技术实施例提供的短链接生成方法的可选地流程示意图;
21.图3为本技术实施例提供的短链接生成方法的可选地流程示意图;
22.图4为本技术实施例提供的热备份的可选地流程示意图;
23.图5为本技术实施例提供的发号器的原理示意图;
24.图6为本技术实施例提供的发号器获取号码的原理示意图
25.图7为本技术实施例提供的存储和热备份短链接的可选地流程示意图;
26.图8为本技术实施例提供的短链接生成装置的可选地结构示意图;
27.图9为本技术实施例提供的电子设备的可选地结构示意图。
具体实施方式
28.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对申请的具体技术方案做进一步详细描述。以下实施例用于说明本技术,但不用来限制本技术的范围。
29.本技术实施例可提供为短链接生成方法及装置、设备(例如电子设备)和存储介质(例如计算机可读存储介质)。实际应用中,短链接生成方法可利用短链接生成装置实现。
30.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中在本技术的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本技术。本文所使用的术语“和/或”包括一个或多个相关的所列项目的任意的和所有的组合。
31.对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
32.1)链接,是指从一个网页指向一个目标的连接关系,其中,目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是图片、文件等。
33.2)短链接,链接的一种分类,其中,短链接通常由7个字符组成,或者由小于7个的字符组成。
34.3)消息队列(message queue,mq),是一个能够传输数据的队列。
35.本技术实施例的短链接生成方法可应用于图1所示的短链接生成系统100,如图1
所示,该短链接生成系统100包括服务器10、客户端20和网络30。其中,服务器10和客户端20之间通过网络30进行通信。服务器10在确定短链接后,通过网络30将确定的短链接发送至客户端20。
36.下面,结合图1所示的短链接生成系统的示意图,对本技术实施例提供的短链接生成方法、装置、设备及存储介质的各实施例进行说明。
37.本技术实施例提供一种短链接生成方法,该方法应用于短链接生成装置。该短链接生成装置所实现的功能可以通过服务器中的处理器调用程序代码来实现,当然程序代码可以保存在存储器中,可见,该服务器至少包括处理器和存储器。
38.下面通过附图及具体实施例对本技术做进一步的详细说明。
39.图2为本技术实施例提供的一种短链接生成方法的实现流程示意图,该方法应用于服务器,如图2所示,该方法可以包括如下步骤:
40.s201、服务器获取目标号段。
41.其中,目标号段的最小值与所述目标号段的前一个号段的最大值相同,所述目标号段的最大值与所述目标号段的后一个号段的最小值相同,所述目标号段包括第一数量的号码。
42.在每个号段中,均包括一段连续的正整数。例如,第一数量为10,在号段[0,10]中,包括由0到10的一段连续的正整数。
[0043]
本技术实施例中,服务器可以包括:中央号段生成器和代码生成器,其中,中央号段生成器用于生成多个号段,代码生成器用于从该多个号段中拿取一个号段作为目标号段,对目标号段进行扩展,并将扩展后的目标号段发送给发号器。
[0044]
中央号段生成器在发出一定数量的号段后,会继续生成新的号段。在一示例中,中央号段生成器在发出十个号段,例如,[0,10]、
……
、[90,100]后,该中央号段生成器会继续生成新的号段[100,110]。
[0045]
本技术实施例中,上述s201包括:中央号段生成器生成多个号段,代码生成器从多个号段中拿取一个号段作为目标号段。
[0046]
在一示例中,中央号段生成器生成的多个号段,包括:5个号段为[0,10]、[10,20]、[20,30]、[30,40]、[40,60]这5个号段;代码生成器从这5个号段中拿取一个号段,例如,号段[10,20],并将该号段[10,20]作为目标号段。在目标号段[10,20]中,包括第一数量的号码,例如10个号码,该目标号段的前一个号段为[0,10],其中,号段[0,10]的最小值为0,最大值为10;该目标号段的后一个号段为[20,30],其中,号段[20,30]的最小值为20,最大值为30;其中,目标号段的最小值为10,与前一个号段[0,10]的最大值10相同,目标号段的最大值为20,与后一个号段[20,30]的最小值20相同。
[0047]
s202、服务器对所述目标号段的最小值和最大值进行扩展,得到扩展后的目标号段,所述扩展后的目标号段包括第二数量的号码。
[0048]
其中,第二数量大于第一数量。
[0049]
这里,代码生成器对所述目标号段的最小值和最大值进行扩展,可以是对目标号段的最小值乘以一个系数,和对目标号段的最大值乘以一个系数,从而得到扩展后的目标号段,所述扩展后的目标号段包括第二数量的号码,并将扩展后的目标号段发送至发号器。
[0050]
需要说明的是,本技术实施例不对系数的数值进行限定。例如,系数可以是10000,
也可以是20000。
[0051]
在一示例中,目标号段为[10,20],对目标号段的最小值10乘以系数10000,得到扩展后的目标号段的最小值为100000,对目标号段的最大值20乘以系数10000,得到扩展后的目标号段的最大值为200000,这样,扩展后的目标号段为[100000,200000],该扩展后的目标号段包括第二数量为100000的号码。
[0052]
s203、服务器从所述第二数量的号码中确定目标号码。
[0053]
这里,服务器还可以包括:发号器,通过发号器从第二数量的号码中确定目标号码。
[0054]
在一示例中,发号器从100000至200000这100000个号码中,选择一个号码作为目标号码,例如,选择100000作为目标号码。
[0055]
本技术实施例中,服务器可以包括多个发号器,其中,当多个发号器同时申请获取号段时,可以通过分布式锁确保发号器获取号段的正交性,进而可以保证多个发号器中的每个发号器获取的目标号段是正交的。
[0056]
当目标号段中的号码发放完毕后,代码生成器可以再从中央号段生成器拿取下一个可以发放的号段。
[0057]
s204、服务器对所述目标号码进行转换,确定短链接。
[0058]
这里,通过发号器对目标号码进行转换,确定短链接。其中,短链接可以是一个字符串。
[0059]
在一示例中,目标号码为10000,发号器对10000进行转换,确定短链接。
[0060]
本技术实施例提供的一种短链接生成方法,获取目标号段,所述目标号段的最小值与所述目标号段的前一个号段的最大值相同,所述目标号段的最大值与所述目标号段的后一个号段的最小值相同,所述目标号段包括第一数量的号码;对所述目标号段的最小值和最大值进行扩展,得到第二数量的号码;从所述第二数量的号码中确定目标号码;对所述目标号码进行转换,确定短链接。这样,在确定短链接的过程中,由于可以先从多个号段中确定目标号段,再从目标号段中确定一个目标号码,对该目标号码进行转换,确定短链接,因此,可以直接对目标号码进行转换,确定短链接,不需要再通过繁琐的步骤将长链接转换为短链接了,从而可以缩短链接的生成流程,进而可以提高短链接的生成速度。
[0061]
在一些实施例中,上述s201包括:
[0062]
s201a、服务器判断本地缓存的号码的数量是否小于预设阈值。
[0063]
需要说明的是,本技术实施例不对预设阈值的数值进行限制。例如,预设阈值可以为10000,也可以为20000。
[0064]
s201b、若所述本地缓存的号码的数量小于等于所述预设阈值,则获取目标号段。
[0065]
本技术实施例中,在获取目标号段之前,服务器需要先判断本地缓存的号码的数量是否小于预设阈值,若本地缓存的号码的数量小于等于预设阈值,则说明原有的本地缓存的号码数量较少,此时需要获取目标号段,对获取到的目标号段进行扩展,并从扩展后的目标号段中确定目标号码,从而对目标号码进行转换,确定短链接。
[0066]
在一些实施例中,本技术实施例提供的短链接生成方法还包括:若本地缓存的号码的数量大于预设阈值,服务器则从本地缓存的号码中确定目标号码。
[0067]
本技术实施例中,若本地缓存的号码的数量大于预设阈值,则说明原有的本地缓
存的号码数量较多,能够使得服务器直接从本地缓存的号码中确定目标号码,此时就不需要再获取目标号段,并对目标号段进行扩展,再从扩展后的目标号段中确定目标号码了。
[0068]
在一些实施例中,上述s204包括:
[0069]
s204a、服务器对所述目标号码进行取模,得到取模结果。
[0070]
其中,所述取模结果包括:至少一个取模参数。
[0071]
这里,服务器将目标号码进行取模,可以是将目标号码对取模系数进行取模。
[0072]
需要说明的是,本技术实施例不对取模系数进行限制。例如,取模系数可以是62,也可以是其他数字。
[0073]
在一示例中,目标号码为10000,将目标号码10000对62进行取模,得到10000=625*0+624*0+623*0+622*2+621*37+18,其中,得到的取模结果包括:至少一个取模参数,该至少一个取模参数,包括:18、37、2、0、0、0。
[0074]
s204b、服务器确定所述至少一个取模参数中的每一个所述取模参数对应的字符。
[0075]
其中,至少一个所述字符组成所述短链接。
[0076]
这里,可以根据取模参数与字符的对应关系所形成的对应关系表,确定至少一个取模参数中的每一个取模参数对应的字符。其中,对应关系表可如表1所示。
[0077]
在表1所示对应关系表中,有a

z,a

z,0

9共62个字符,每一个字符都有与其对应的取模参数。其中,第一行为一部分取模参数,第二行为与第一行的取模参数所对应的字符,第三行为一部分取模参数,第四行为与第三行的取模参数所对应的字符,以此类推。
[0078]
表1、对应关系表示例
[0079]
0123456789n14zcelf0c10111213141516171819yvqs7tpo2820212223242526272829kj9uixvsdt30313233343536373839bmwrgkrfua404142434445464748493d5bwlnizx50515253545556575859amyqjghheo6061
ꢀꢀꢀꢀꢀꢀꢀꢀ
6p
ꢀꢀꢀꢀꢀꢀꢀꢀ
[0080]
在一示例中,目标号码为10000,将10000对62取模,得到的第一个取模参数为18,通过查找表1,可以得到18对应的字符为2;得到的第二个取模参数为37,通过查找表1,可以得到37对应的字符为f;得到的第三个取模参数为2,通过查找表1,可以得到2对应的字符为4;得到的第四个取模参数为0,通过查找表1,可以得到0对应的字符为n;得到的第五个取模参数为0,通过查找表1,可以得到0对应的字符为n;得到的第六个取模参数为0,通过查找表1,可以得到0对应的字符为n。由于高位在左侧,因此,服务器确定的与6个取模参数对应的
字符为nnn4f2。
[0081]
需要说明的是,本技术实施例不对对应关系表中包括的字符进行限定,也可以根据业务场景用其他字符代替。
[0082]
本技术实施例中,可以采用插入视觉干扰位和强规律字符串过滤的方法,使得在服务器中确定的字符串没有规律,这样,可以保证终端无法获取短链接的生成方式。
[0083]
在一示例中,插入视觉干扰位为在确定的字符串中插入一个视觉干扰位。例如,在确定的字符串“nnn4f2”的第二位插入字符“q”,变成“nqnn4f2”。
[0084]
在一示例中,强规律字符串过滤为在类似“aaaaaa”,“aaaaab”等这种连续多位一致,规律性极强的字符串可以做过滤处理,不将其发送给终端。
[0085]
本技术实施例中,为了使得终端无法获取短链接的生成方式,除了采用上述的插入视觉干扰位和强规律字符串过滤的方法外,还可以采用分布式场景,使得获取的目标号码为不同号段中的号码,这样,由于获取的目标号码为不同号段中的号码,因此,获取到的字符串的差距就会较大,从而可以使得终端难以发现字符串的生成规律。
[0086]
在一些实施例中,在上述s201后,所述方法还包括:
[0087]
s205、服务器获取排序策略。
[0088]
这里,排序策略可以是对号码进行乱序排序的排序策略,也可以对号码进行从大到小的排序策略,还可以是对号码进行从小到大的排序策略,本技术实施例对此不作限制。
[0089]
s206、服务器基于所述排序策略将所述目标号段所包括的第一数量的号码进行排序。
[0090]
在一示例中,若排序策略为对号码进行乱序排序的排序策略,服务器则可以对目标号段所包括的第一数量的号码进行乱序排序。
[0091]
这样,基于排序策略对第一数量的号码进行排序,可以使得经过排序后的号码与排序前的号码不同,从而可以使得目标号段所包括的第一数量的号码的排序没有规律,进而可以使得终端无法获取短链接的生成方式。
[0092]
在一些实施例中,上述s204后,所述方法还包括:
[0093]
s207、服务器对所述短链接进行一次存储,存储至第一存储区域。
[0094]
其中,所述第一存储区域用于实现对所述短链接的高速存取。
[0095]
这里,服务器对短链接进行一次存储即为服务器将短链接存储至第一存储区域中,其中,第一存储区域可以是缓存区域,也可以是远程字典服务(remote dictionary server,redis)数据库等内存数据库,本技术实施例对此不作限制。
[0096]
本技术实施例中,对生成的短链接进行存储,例如,存储在redis中,可以使得生成的短链接具有持久化。
[0097]
s208、服务器对所述短链接进行二次存储,存储至第二存储区域。
[0098]
其中,所述第二存储区域用于实现对所述短链接的备份,例如,热备份。
[0099]
这里,服务器对短链接进行二次存储即为服务器对短链接进行热备份,将短链接热备份至第二存储区域,其中,第二存储区域可以是基于分布式存储系统的存储区域,例如可以是基于hadoop的数据库(hadoop database,hbase)数据库和数据仓库工具(hive)数据库。其中,hbase数据库具备成本低廉、性能优良、极易扩展等特性,同时支持快速插入和查询操作,解决了关系型数据库(mysql数据库)无法适应海量数据存取的系统瓶颈。hive数据
库用于保存全量数据。
[0100]
这样,对短链接进行一次存储,即将短链接存储至缓存中,可以实现对短链接的高速存取,在将短链接存储至缓存区域后,还可以对全量短链接进行二次存储,即将短链接存储至磁盘中,这样,可以实现全量短链接的安全性。
[0101]
在终端访问短链接时,可以先从缓存中获取短链接,若没有从缓存中获取到短链接,再从磁盘中获取短链接。
[0102]
本技术实施例中,可以采用最近最少使用(least recently used,lru)算法清理缓存中不常用的短链接。
[0103]
这里,判断缓存中的短链接是否是不常用的短链接的判断依据可以为:短链接的保存时间,和/或,访问短链接的次数。
[0104]
若短链接的保存时间大于预设保存时间,则判断短链接是不常用的短链接;若短链接的保存时间小于等于预设保存时间,则判断短链接是常用的短链接。
[0105]
若访问短链接的次数大于预设访问次数,则判断短链接是常用的短链接;若访问短链接的次数小于等于预设访问次数,则判断短链接是不常用的短链接。
[0106]
在一些实施例中,在上述s207之后,所述方法还包括:
[0107]
s209、服务器将所述短链接发送至消息队列mq。
[0108]
这里,服务器还可以包括:消息队列客户端,消息队列客户端控制所述短链接发送至消息队列服务器,其中,将短链接发送至消息队列服务器即可认为将短链接发送至消息队列mq。
[0109]
服务器在将短链接发送至消息队列后,上述s208包括:
[0110]
s208a、服务器消费所述消息队列中的所述短链接,分别将所述短链接存储至第一数据库和第二数据库。
[0111]
其中,第一数据库和第二数据库不同。在一示例中,第一数据库可以是hbase数据库,第二数据库可以是hive数据库。
[0112]
本技术实施例中,可以将短链接发送至消息队列,再通过消息队列将短链接存储至第一数据库和第二数据库,从而可以实现对短链接存储和热备份的异步解耦,从而缩短对短链接进行存储和热备份的时间。
[0113]
在一些实施例中,上述s209包括:
[0114]
s209a、服务器判断所述消息队列的网络是否异常。
[0115]
这里,消息队列客户端中的配置文件里设置有最长等待时间,消息队列客户端控制短链接发送至消息队列时,如果超过该最长等待时间消息队列客户端还没有收到消息队列确认收到短链接的回复,那么消息队列客户端将会判断消息队列的网络是异常的。
[0116]
s209b、若所述消息队列的网络异常,则通过补发消息线程将所述短链接发送至补发消息列表,并将所述补发消息列表中的短链接重新发送至所述消息队列。
[0117]
本技术实施例中,若消息队列的网络异常,则说明服务器无法将短链接发送至消息队列,此时需要通过补发消息线程将短链接发送至补发消息列表msglist,再将补发消息列表msglist中的短链接重新发送至消息队列。
[0118]
其中,补发消息列表msglist是使用redis实现的一个先进先出队列,主要保存的是需要通过补发消息线程进行补发的短链接,通过lpush指令保存短链接,通过rpop指令获
取短链接,从而保证了短链接执行的顺序性以及高效性,短链接执行的时间复杂度为o(1)。其中,时间复杂度o(1)表示通过lpush指令保存短链接的次数,以及通过rpop指令获取短链接的次数是一个常数。
[0119]
补发消息线程会定时扫描补发消息列表msglist,对发送失败的短链接进行再次发送。
[0120]
在一示例中,在向消息队列发送第一短链接的过程中,若消息队列的网络异常,则会造成该第一短链接无法发送至消息队列,此时可通过补发消息线程将该第一短链接发送至补发消息列表,再将该补发消息列表中的第一短链接重新发送至消息队列。
[0121]
在一些实施例中,在服务器通过补发消息线程将所述短链接发送至补发消息列表之后,所述方法还包括:
[0122]
s210、服务器通过备份消息线程,将所述补发消息列表中的短链接备份至备份消息列表。
[0123]
本技术实施例中,备份消息线程用于对补发消息线程获取的短链接进行备份,且备份消息线程会定时扫描备份消息列表backuplist,把长时间未删除的消息重新放到补发消息列表msglist,备份消息列表backuplist用于保存通过备份消息线程获取的短链接。
[0124]
在一示例中,服务器可以通过redis的brpoplpush命令,将补发消息列表中的短链接原子性的备份至备份消息列表backuplist。其中,将短链接原子性的备份至备份消息列表即为将短链接完整性的备份至备份消息列表。
[0125]
s211、服务器判断所述补发消息列表中的短链接是否重新发送至所述消息队列。
[0126]
s212、若所述补发消息列表中的短链接重新发送至所述消息队列,则将备份消息列表中的与所述补发消息列表中的重新发送至消息队列的短链接删除。
[0127]
s213、若所述补发消息列表中的短链接没有重新发送至所述消息队列,则对备份消息列表中的与所述补发消息列表中对应的短链接进行保留,当保留时长大于预设时间时,则将所述备份消息列表中的短链接重新发送至所述补发消息列表。
[0128]
在一示例中,补发消息列表msglist包括第二短链接和第三短链接,服务器通过备份消息线程,将第二短链接和第三短链接备份至备份消息列表backuplist,此时,备份消息列表backuplist包括:第二短链接和第三短链接,若补发消息列表msglist中的第二短链接重新发送至消息队列了,则将备份消息列表backuplist中的第二短链接删除;若补发消息列表msglist中的第三短链接因网络异常而没有重新发送至消息队列,则对备份消息列表backuplist中的第三短链接进行保留,当保留时长大于预设时长时,则将备份消息列表backuplist中的第三短链接重新发送至补发消息列表msglist。
[0129]
本技术实施例提供的短链接生成方法,如图3所示,终端20向服务器10发送短链接生成请求,服务器10基于终端发送的短链接生成请求,向终端20发送短链接。其中,服务器可以通过执行步骤a:生成短链接,步骤b:存储短链接,以及步骤c:热备份短链接,完成短链接的生成以及对短链接的存储和热备份。下面将分别对这三个功能进行详细介绍。
[0130]
步骤a、生成短链接。
[0131]
其中,步骤a可以包括::
[0132]
步骤a1、代码生成器器获取目标号段。
[0133]
本技术实施例中,服务器包括:中央号段生成器、代码生成器和发号器。其中,中央
号段生成器用于生成一定数量的号段,例如,10个号段,每个号段是由一段连续的正整数组成的号码片段。
[0134]
在一示例中,中央号段生成器生成10个号段,例如,[0,10]、[10,20]、[20,30]、
……
、[m,k]、[k,k+10]、[k+10,n]、
……
、[90,100],其中,k,m和n为正整数)。
[0135]
代码生成器用于从中央号段生成器生成的一定数量的号段中拿取一个号段作为目标号段,对该目标号段进行扩展,并将扩展后的目标号段发送至发号器。
[0136]
在一示例中,代码生成器从[0,10]、[10,20]、[20,30]、
……
、[k,k+10]这10个号段中选择[k,k+10]作为目标号段。
[0137]
在一示例中,目标号段为[k,k+10],对目标号段进行扩展,得到扩展后的目标号段为[k*10000,(k+10)*10000

1]。
[0138]
发号器用于从扩展后的目标号段中选择一个号码,作为目标号码。
[0139]
步骤a2、发号器通过短链接生成算法,生成短链接。
[0140]
这里,对于发号器通过短链接生成算法,生成短链接的描述具体可参见上述s204a和s204b的描述,此处不再赘述。
[0141]
本技术实施例中,中央号段生成器用于生成号段,代码生成器用于发放号段,使用中央号段生成器和代码生成器可以将号段生成和发放解耦,有效分担中央号段生成器的服务压力,代码生成器依赖于中央号段生成器,终端通过发号器获取字符串,这样,可以使得服务有更好的横向扩展性,当访问量较大时只需要横向扩展发号器就可以提升服务的吞吐量。通过这种设计可以支持每天上亿的访问量。
[0142]
步骤b、存储短链接。
[0143]
这里,对于步骤b的解释,具体可以参见上述实施例中对于s207和s208的解释,此处不再赘述。
[0144]
由于现有技术中是先将数据存入缓存后,再将数据存入磁盘,这样,一次存储操作需要2次存储的时间开销,因此,本技术实施例中,使用消息队列将2次存储解耦,例如,在将数据存入缓存后,将数据直接放入消息队列,再由消息队列下游数据处理系统接收数据并将数据写入磁盘中,这样,可以将2次时间开销缩短为1次。
[0145]
步骤c、对短链接进行热备份。
[0146]
本技术实施例中,热备份短链接的实现原理主要是通过消息队列实现的,如图4所示,在对短链接进行热备份的过程中,包括下述步骤:
[0147]
s401、服务器将短链接发送至消息队列mq。
[0148]
s402、消息队列mq接收服务器发送的短链接,并将短链接分别存储至hbase数据库和hive数据库。
[0149]
在一些实施例中,图5为发号器的实现原理示意图,如图5所示,发号器执行的功能包括:第一功能d、第二功能e以及第三功能f;其中,第一功能d为获取号码功能;第二功能e为号码加载功能;第三功能f为灾备以及故障恢复功能,下面将对这几个功能具体解释:
[0150]
如图5所示,在实现获取号码功能的过程中,包括如下步骤:
[0151]
s501、发号器判断本地缓存的号码的个数是否大于预设阈值;
[0152]
s502、若大于预设阈值,则从本地缓存的号码中获取目标号码;
[0153]
s503、若小于等于预设阈值,则提交号码加载任务至线程池。
[0154]
在提交号码加载任务至线性池后,发号器可以对号码进行异步加载。
[0155]
如图5所示,在实现号码加载功能的过程中,包括如下步骤:
[0156]
s504、发号器获取目标号段中的最小值x;
[0157]
s505、发号器对目标号段中的最小值和最大值进行扩展。
[0158]
在一示例中,对目标号段中的最小值和最大值进行扩展后的目标号段可以是:[x*100000,(x+10)*100000];
[0159]
s506、发号器生成所有号码;
[0160]
s507、发号器打乱所有号码顺序;
[0161]
s508、发号器将所有号码保存到本地缓存;
[0162]
s509、发号器提交灾备任务到线性池。
[0163]
在发号器将灾备任务提交到线性池后,发号器可以进行异步灾备。
[0164]
在灾备以及故障恢复过程中,包括如下步骤:
[0165]
s510、备份线程从redis中获取最新的号码值;
[0166]
s511、从灾备数据库mysql中获取最新的号码值;
[0167]
s512、判断redis中获取的最新的号码值是否小于灾备数据库mysql中获取的最新的号码值;
[0168]
s513、若redis中的最新的号码值大于等于灾备数据库mysql的最新的号码值,则说明redis中的号码值没有被删除或者被篡改过;
[0169]
在redis中的号码值没有被删除或者被篡改过的情况下,可以更新redis中的号码值到灾备数据库mysql。
[0170]
s514、若redis中的最新的号码值小于灾备数据库mysql中最新的号码值,则说明redis中的号码值被删除或者被篡改过;
[0171]
s515、对redis进行监控并向相关人员进行报警,并且对故障进行恢复。
[0172]
在一示例中,可以通过执行回滚操作,对故障进行恢复,该回滚操作为将redis中的最新的号码值设置为灾备数据库mysql的号码值+1000。
[0173]
通过将获取号码、号码加载、灾备以及故障恢复这四个部分通过异步编程的方式实现解耦,能够实现自动进行灾备、故障检测和故障修复,发号性能低于1ms,并且由于服务器之间的号码池完全隔离,因此,本技术实施例提供的发号器具备高并发、高性能、高可靠性的优势。
[0174]
如图6所示,中央号段生成器可生成多个号段,并将多个号段发送给发号器,发号器可以从中央号段生成器中获取号段,发号器获取号段以后会将号段数字打乱,乱序保存在本地,每次从本地存储器中按需取出可以使用的号码,号码取出后,就丢弃,不可以再次发放给第二个终端。乱序可以让终端在获取数据时感觉号段是随机产生的。例如从中央号段生成器获取号段是[0,9],那么在本地的存储可能是[7,6,0,5,2,3,4,1,8,9](随机存储,也可能是别的序列)。
[0175]
下面将对短链接生成算法作详细解释。
[0176]
发号器保证了高性能的获取唯一号码,短链接生成算法需要做的就是保证号码与短链的唯一映射。通过保证每次获取的短链具有唯一性,我们可以大量较少操作redis的次数,大大减少因为操作redis而带来的时间开销,从而提高短链接的生成性能。
[0177]
短链接生成算法所采用的思想是将10进制数字转换成16进制的数字,使用取模映射法,生成字符串位数和取模次数相等,实现随机字符串生成长度的可控性。
[0178]
本技术实施例中,短链接生成算法包括上述的s204a和s204b,具体解释请参见上述实施例中对于s204a和s204b的解释,此处不再赘述。
[0179]
下面将对存储和热备份短链接进行详细解释。
[0180]
本技术实施例中,存储和热备份短链的过程是异步解耦的,从而可以解决现有流程过长,非核心流程影响主流程性能等系统问题。
[0181]
短链接生成以后将短链接和相关数据保存在分布式内存数据库redis中,然后再将数据放入消息队列mq等中间件中,由对应的热备份流程进行后续数据的备份工作。通过引入mq,可以实现对短链接进行存储和热备份的异步解耦,从而可以实现短链接生成的高效性。
[0182]
如图7所示,对短链接进行存储和热备份主要包含两大部分:异步发送mq消息机制和失败消息补救机制。
[0183]
其中,在异步发送mq消息机制中,包括:
[0184]
s701、发号器生成短链接;
[0185]
s702、通过redis对短链接进行存储;
[0186]
s703、发号器将短链接发送至消息队列mq;
[0187]
s704、发号器判断mq网络是否异常;
[0188]
s705、若异常,则将短链接发送至补发消息列表msglist;
[0189]
s706、若不异常,则将短链接发送至消息队列mq。
[0190]
在将短链接发送至消息队列mq后,发号器将短链接分别发送至hbase数据库和hive数据库。
[0191]
在失败消息补救机制中,通过补发消息线程,可以对因mq网络异常而未发送至消息队列的短链接进行重新发送,通过备份消息线程,可以对补发消息线程中的短链接进行备份,其中,备份消息线程,包括:
[0192]
s707、通过备份消息线程,对补发消息列表中的短链接进行备份;
[0193]
s708、判断创建时间是否超过预设时间;
[0194]
s709、若超过预设时间,则把超过预设时间的未执行的短链接重新发送到补发消息列表msglist;
[0195]
本技术实施例中,异步发送mq消息机制主要是借助与mq相关的客户端(client)实现的,发送结果会调用回调函数:发送成功的短链接可以被异步写入hbase和hive;发送失败的短链接可以保存到补发消息列表msglist。失败消息补救机制主要用于解决当mq网络异常的补救,mq网络异常会给系统带来灾难性影响,会在一段时间内导致短链服务整体不可用,所以我们在mq网络异常的情况下采用快速失败策略。快速失败策略可以快速的给用户反馈结果,不影响核心流程。
[0196]
补发消息列表msglist和备份消息列表backuplist是使用redis实现的一个先进先出队列,通过lpush指令保存消息,通过rpop指令获取消息,从而保证了消息执行的顺序性以及高效性,消息的执行时间复杂度为o(1)。补发消息列表msglist主要是保存哪些消息需要通过补发消息线程进行补发;备份消息列表backuplist主要是保存哪些补发消息已经
被补发消息线程获取了,即对补发消息列表中的消息进行备份。
[0197]
补发消息线程定时扫描补发消息列表msglist,对发送失败的消息进行再次发送。比如,当查询到补发消息列表msglist有消息message1,这时补发消息线程会通过redis的brpoplpush命令把message1从补发消息列表msglist删除并原子性的保存到备份消息列表backuplist。如果补发消息线程发送mq成功,则再次从备份消息列表删除message1;如果补发消息线程崩溃了或者发送mq失败,则不做处理。
[0198]
备份消息线程定时扫描备份消息列表backuplist,把长时间未删除的消息重新放到补发消息列表msglist。比如上述message1在被补发消息线程获取之后崩溃了,就会导致message1没有从备份消息列表删除,这时候备份消息线程就会获取到message1,如果message1的消息创建时间大于设定的时间阈值,例如,30分钟,则备份消息线程则会通过redis的brpoplpush命令把message1从备份消息列表backuplist删除并原子性的保存到补发消息列表msglist。
[0199]
本技术实施例中,通过引入发号器、优化生成算法、异步化解耦存储和热备份,可以使得性能从之前的17ms提升到3ms。
[0200]
图8为本技术实施例提供的一种数据处理装置,如图8所示,该数据处理装置800包括:
[0201]
获取单元801,用于获取目标号段;所述目标号段的最小值与所述目标号段的前一个号段的最大值相同,所述目标号段的最大值与所述目标号段的后一个号段的最小值相同,所述目标号段包括第一数量的号码;
[0202]
处理单元802,用于对所述目标号段的最小值和最大值进行扩展,得到扩展后的目标号段,所述扩展后的目标号段包括第二数量的号码,所述第二数量大于所述第一数量;
[0203]
确定单元803,用于从所述第二数量的号码中确定目标号码
[0204]
所述确定单元803,还用于对所述目标号码进行转换,确定短链接。
[0205]
在一些实施例中,获取单元801,具体用于判断本地缓存的号码的数量是否小于预设阈值;若所述本地缓存的号码的数量小于等于所述预设阈值,则获取目标号段。
[0206]
在一些实施例中,确定单元803,还用于若所述本地缓存的号码的数量大于所述预设阈值,则从所述本地缓存的号码中确定目标号码。
[0207]
在一些实施例中,确定单元803,具体用于对所述目标号码进行取模,得到取模结果,所述取模结果包括:至少一个取模参数;确定所述至少一个取模参数中的每一个所述取模参数对应的字符;至少一个所述字符组成所述短链接。
[0208]
在一些实施例中,短链接生成装置还包括:排序单元;获取单元801,还用于获取排序策略;排序单元,用于基于所述排序策略将所述目标号段所包括的第一数量的号码进行排序。
[0209]
在一些实施例中,短链接生成装置还包括:存储单元;所述存储单元用于对所述短链接进行一次存储,存储至第一存储区域;所述第一次存储区域用于实现对所述短链接的高速存取;所述存储单元还用于对所述短链接进行二次存储,存储至第二存储区域;所述第二次存储区域用于实现对所述短链接的备份。
[0210]
在一些实施例中,短链接生成装置还包括:发送单元;所述发送单元,用于将所述短链接发送至消息队列;存储单元,具有用于消费所述消息队列中的所述短链接,分别将所
述短链接存储至第一数据库和第二数据库,所述第一数据库与所述第二数据库不同。
[0211]
在一些实施例中,发送单元,具体用于判断所述消息队列的网络是否异常;若所述消息队列的网络异常,则通过补发消息线程将所述短链接发送至补发消息列表,并将所述补发消息列表中的短链接重新发送至所述消息队列。
[0212]
在一些实施例中,处理单元还用于通过备份消息线程,将所述补发消息列表中的短链接备份至备份消息列表;判断所述补发消息列表中的短链接是否重新发送至所述消息队列;若所述补发消息列表中的短链接重新发送至所述消息队列,则将备份消息列表中的与所述补发消息列表中的重新发送至消息队列的短链接删除;若所述补发消息列表中的短链接没有重新发送至所述消息队列,则对备份消息列表中的与所述补发消息列表中对应的短链接进行保留,当保留时长大于预设时长时,则将所述备份消息列表中的短链接重新发送至所述补发消息列表。
[0213]
本技术实施例还提供一种电子设备,包括存储器和处理器,所述存储器存储有可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例中提供的短链接生成方法。其中,该电子设备可为客户端,也可为服务端。
[0214]
本技术实施例还提供一种存储介质,也就是计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中提供的短链接生成方法。
[0215]
这里需要指出的是:以上存储介质和设备实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本技术存储介质和设备实施例中未披露的技术细节,请参照本技术方法实施例的描述而理解。
[0216]
需要说明的是,图9为本技术实施例电子设备的一种硬件实体示意图,如图9所示,所述电子设备900包括:一个处理器901、至少一个通信总线702、至少一个外部通信接口904和存储器905。其中,通信总线902配置为实现这些组件之间的连接通信。在一示例中,电子设备900还包括:用户接口903、其中,用户接口903可以包括显示屏,外部通信接口904可以包括标准的有线接口和无线接口。
[0217]
存储器905配置为存储由处理器901可执行的指令和应用,还可以缓存待处理器901以及电子设备中各模块待处理或已经处理的数据(例如,图像数据、音频数据、语音通信数据和视频通信数据),可以通过闪存(flash)或随机访问存储器(random access memory,ram)实现。
[0218]
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本技术的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一些实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本技术的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
[0219]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该
要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0220]
在本技术所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
[0221]
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
[0222]
另外,在本技术各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0223]
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(read only memory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。
[0224]
或者,本技术上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本技术各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。
[0225]
以上所述,仅为本技术的实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以所述权利要求的保护范围为准。
[0226]
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1