掌桥专利:专业的专利平台
掌桥专利
首页

一种短链接生成方法和装置

文献发布时间:2023-06-19 10:57:17


一种短链接生成方法和装置

技术领域

本发明涉及计算机技术领域,尤其涉及一种短链接生成方法和装置。

背景技术

短网址服务,简单来说就是把一个很长的URL地址(Uniform Resource Locator,统一资源定位符)转化为相对简短的地址而且仍然可以正常使用,让用户可以更容易的分享链接,避免折行或者超字符限制。

现有生成短链接的方法主要分为两种:

1)消息摘要算法MD5(Message Digest Algorithm MD5,消息摘要算法第五版):将长链接生成32位签名串并分为4段,每段1个字节(即8位),再通过16进制转换补位获得字母表索引,进而生成6位短链接;

2)利用顺序映射,即相对简单的按照字母数字,顺序生成,类似于aaaaaa这种方式。

在实现本发明的过程中,发明人发现现有技术至少存在如下问题:

1)对于MD5算法所得6位短链接来讲,任意大小写字母数字组合就有560亿多,当短链接的数量超过10亿,即表示生成56个链接,至少就会有一个重复的产生,造成访问错误;

2)随着短链接数量的增长,其碰撞概率也不断加大。当出现碰撞情况,需要重新生成短链接,并重新判断所生成的短链接是否已存在,额外增加了系统的运行负担,甚至导致系统阻塞;

3)对于顺序映射来讲,用户可能两次所得短链接字符是连续的,这对于用户来讲并不友好;且用户可以根据当前所得到的短链接字符,很容易猜测到短链接生成服务的流量,例如aaaaaa~aaaaad,服务的流量就是1秒里有4个人调用;

4)大多数程序都带有地址还原,即直接可以通过短链接还原到真实网址。因此现有技术一般都会维护短链接->长链接以及长链接->短链接的索引,造成资源的巨大浪费。

发明内容

有鉴于此,本发明实施例提供一种短链接生成方法和装置,至少能够解决现有技术中短链接碰撞概率较高、维护长短链接索引资源较为浪费的问题。

为实现上述目的,根据本发明实施例的一个方面,提供了一种短链接生成方法,包括:

接收短链接生成请求;其中,所述短链接生成请求包括长链接;

获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接。

可选的,在所述接收短链接生成请求之后,还包括:

确定所述短链接生成请求的编号,分配所述短链接生成请求至与所述编号相应的放号装置中。

可选的,在所述接收短链接生成请求之前,还包括:

根据预定周期,将放号装置所包含的号码范围以及当前已分配的号码信息存储至目标存储中;和/或

若检测到所述放号装置关闭、且未达到所述预定周期,则将所述放号装置所包含的号码范围以及当前已分配的号码信息存储至所述目标存储中;

所述获取号码范围以及当前已分配的号码信息,包括:

若检测到所述放号装置启动,则根据所述放号装置的装置标识,从所述目标存储中获取所述放号装置所包含的号码范围以及当前已分配的号码信息。

可选的,所述确定与所述号码相应的号码牌,包括:通过预定进制表,转换所述号码为相应的索引值;根据索引值与号码牌的对应关系,得到与所述索引值相应的号码牌。

可选的,所述索引值由数字标识组成,所述号码牌由字符组成;

在根据索引值与号码牌的对应关系,得到与所述索引值相应的号码牌之前,还包括:

通过洗牌方式,调整各个字符的排序,并按序添加数字标识至排序后的各个字符中,以建立数字标识与字符的对应关系。

可选的,所述长链接还包括参数;

所述生成与所述长链接相应的短链接,还包括:通过消息摘要方式,对所述长链接中的协议、域名和参数进行加密,得到加密后的加密串,并建立所述加密串与所述短链接的对应关系。

可选的,在所述生成与所述长链接相应的短链接之后,还包括:若在预定时长内未接收到对所述短链接和/或所述长链接的访问请求,则确定所述短链接和所述长链接为冷数据。

为实现上述目的,根据本发明实施例的另一方面,提供了一种短链接生成装置,包括:

请求接收模块,用于接收短链接生成请求;其中,所述短链接生成请求包括长链接;

号码分配模块,用于获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

链接生成模块,用于确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接。

可选的,所述请求接收模块,还用于:确定所述短链接生成请求的编号,分配所述短链接生成请求至与所述编号相应的放号装置中。

可选的,还包括号码存储模块,用于:

根据预定周期,将放号装置所包含的号码范围以及当前已分配的号码信息存储至目标存储中;和/或

若检测到所述放号装置关闭、且未达到所述预定周期,则将所述放号装置所包含的号码范围以及当前已分配的号码信息存储至所述目标存储中;

所述号码分配模块,用于:

若检测到所述放号装置启动,则根据所述放号装置的装置标识,从所述目标存储中获取所述放号装置所包含的号码范围以及当前已分配的号码信息。

可选的,所述链接生成模块,用于:通过预定进制表,转换所述号码为相应的索引值;根据索引值与号码牌的对应关系,得到与所述索引值相应的号码牌。

可选的,所述索引值由数字标识组成,所述号码牌由字符组成;

所述链接生成模块,用于:

通过洗牌方式,调整各个字符的排序,并按序添加数字标识至排序后的各个字符中,以建立数字标识与字符的对应关系。

可选的,所述长链接还包括参数;

所述链接生成模块,还用于:通过消息摘要方式,对所述长链接中的协议、域名和参数进行加密,得到加密后的加密串,并建立所述加密串与所述短链接的对应关系。

可选的,还包括链接处理模块,用于:若在预定时长内未接收到对所述短链接和/或所述长链接的访问请求,则确定所述短链接和所述长链接为冷数据。

为实现上述目的,根据本发明实施例的再一方面,提供了一种短链接生成电子设备。

本发明实施例的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一所述的短链接生成方法。

为实现上述目的,根据本发明实施例的再一方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一所述的短链接生成方法。

根据本发明所述提供的方案,上述发明中的一个实施例具有如下优点或有益效果:采取单机存储维护待分配的号码,通过集群随机分配算法实现单机发号,进而实现伪随机放号生成短链接。整体既避免了短链接碰撞的情况,也解决了短链接字符连续的问题,具有一定的实现意义。

上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。

附图说明

附图用于更好地理解本发明,不构成对本发明的不当限定。其中:

图1是根据本发明实施例的一种短链接生成方法的主要流程示意图;

图2是分布式集群中多个放号器的布局示意图;

图3是洗牌后的字符与数字标识示意图;

图4是本发明整体实施过程的示意图;

图5是根据本发明实施例的一种可选的短链接生成方法的流程示意图;

图6是根据本发明实施例的另一种可选的短链接生成方法的流程示意图;

图7是根据本发明实施例的又一种可选的短链接生成方法的流程示意图;

图8是根据本发明实施例的一种短链接生成装置的主要模块示意图;

图9是本发明实施例可以应用于其中的示例性系统架构图;

图10是适于用来实现本发明实施例的移动设备或服务器的计算机系统的结构示意图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

需要说明的是,本发明实施例适用于所有网站、或者可以说是所有与链接使用有关的场景,例如微博、微信、手机短信等。

一般维护短链接服务的系统,其存储量都会十分巨大,而且短链接是趋势,以后会逐步取代特别长的链接,例如,item.xx.com/1.html。

对于本发明所涉及的词语,做解释如下:

缓存穿透:一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力,这就叫做缓存穿透。

Incr:如果key不存在,那么key的值会先被初始化为0,然后再执行INCR操作。如果值包含错误的类型或字符串类型的值不能表示为数字,那么返回一个错误。

钩子:是将需要执行的函数或者其他一系列动作注册到一个统一的入口,程序通过调用这个钩子来执行这些已经注册的函数。

随机码就是无论这个码有多长都不会出现循环的现象。而伪随机码,是在码长达到一定程度时会从其第一位开始循环。

参见图1,示出的是本发明实施例提供的一种短链接生成方法的主要流程图,包括如下步骤:

S101:接收短链接生成请求;其中,所述短链接生成请求包括长链接;

S102:获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

S103:确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接。

上述实施方式中,对于步骤S101,对于短链接生成请求(以后简称为请求),通过集群环境中的分布式集群对其进行分发。

具体地,负载均衡(Load Balance)会对请求进行编号,然后将请求分摊到多个放号器上进行执行,具体参见图2所示,从而形成负载均衡-放号器的工作链。

例如,对于第一个请求,负载均衡将其编号为1,并将其分配至放号器1中;对于第二个请求,负载均衡将其编号为2,并将其分配至放号器2中。

进一步的,也可以先将其分配至不同操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

分布式集群环境拥有K台放号器,K可以为1也可以为多个,具体根据请求数量或业务方需求进行设定,本发明以多个放号器为例进行说明,所有放号器的号码都通过一个中心放号器进行管理、获取。

每台放号器需在刚开始使用的时候,需从中心放号器批量获取号牌。假设批量获取M个号码,则每台放号器所得到的号码为中心放号器的当前值~当前值+M。

例如,M=100,中心放号器按照0/100/200/300计数,若当前值是1000,那么分配给放号器的号码就是1000~1100。且对于批量方式,不用每次请求过来,都要走一遍中心放号器。

对于批量所获取的号码数量M,也可以根据业务要求作修改。例如,对于性能要求特别高的业务方,如果M设置过小,会增加放号器对中心放号器的请求次数,而每次从中心放号器获取号码,会有网络请求的消耗。

为维护中心放号器的性能,可以使用分布式缓存或者关系型数据库的号码叠加机制。这里的号码叠加机制是指数据库提供一个自增ID,和计数器一样,就是对ID设置一个初始值,然后一直不停的增加。也可以理解为在中心放号器中增加了一个计数器,用于统计分发给放号器的所有号码量。

对于步骤S102,每台放号器有自己的编号,对于收到请求的放号器,还会对所收到的请求进行编号。例如参见图2所示,第一个请求假若落到放号器1上,使用第一个号牌,即1;第二个请求落到放号器2上,同样使用第一个号码,但此时是10000。

进一步的,若该请求分配至放号器之前,该放号器已经分配出一个号码了,那就可以接着已分配的号码进行号码分配。例如,放号器2已分配号码10000,那么对于第二个请求,所分配的号码就是10001。

需要说明的是,虽放号器分发号码也可以使用随机方式,但由于随机方式需要检查哪些号码没有分配,相较顺序方式而言较为耗时,因此本发明主要使用顺序分配。

对于步骤S103,对于放号器分配至请求的号码,确定其索引值,并将与该索引值相应的号码牌确定为短链接的参数值(一个链接,主要由协议、域名和参数组成)。

具体地:

步骤一:通过预定进制表,转换号码为相应的索引值;

步骤二:根据索引值与号码牌的对应关系,得到与索引值相应的号码牌。

对于步骤一,由于请求数量较多,若采用包含字母/数字较少的进制,可能所得组合数量较少,且重复碰撞率较高。因此,本发明所涉及的N进制,主要为包含大写字母26个、小写字母26个、数字0~9的62进制,且之后主要以62进制为例进行说明。

需要说明的是,虽然62进制所包含的字符,原则上可以为任意字符,但由于所得到的号码牌相当于URL里的参数,对于参数的话,尽量是字母数字,如果是其他字符,可能会与URL冲突。

例如一个@生成的链接,相当于xx.com/abcde@,但是这个@在URL规范里是区分用户名密码的,不能放到参数里,或者说,放到参数里有歧义。

这里补充说明一下62进制算法,即如何根据62进制确定索引值:

首先说一下10进制,只有0-9,到10就变成0了。举例:0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6这个就是10进制。

62进制是指,每个位上有62个数,只有0-61,最大到61,如果是62,又变成0了。所以61=(61)括号里其实是一个数,一般会用一个字母来标示,数字都是10进制的没法表示,所以才加了一个括号。这就有了62=10,往后类推63=11、64=12、65=13、66=14、67=15、68=16、69=17、70=18、71=19、72=1(10)等。

“=”之后就是所得索引值。在62*62=3844的时候,索引值是100;在62*62*2=7688的时候,对应于索引值200。而10000-7688=2312、2312/62=38余数为56,所以10000对应的索引值应该是2(38)(56)。

对于步骤二,通常62进制中的字符都有自己的排序,例如B位于A之后。但考虑到顺序性生成的短链接对于用户并不友好,例如aaaaaa/dddddd,因此本发明在确定与索引值相应的号码牌之前,需要对62进制中的字符进行顺序打乱操作。

本发明采用洗牌方式,与扑克牌玩法一致。原本有62个字符,按照A,B,C,D…排序;通过洗牌把字符顺序打乱,例如R,S,T,b,…,具体参见图3所示。最终实现的目的是,虽然字符是连续的,但是给用户可见的,是打乱顺序的字符。

以上打乱字符顺序的操作,可以解决短链接生成连续的问题,为后续实现短链接生成的多样化提供了基础。

洗牌后的字符已经是乱序了,已经不能和现有技术一样按照字符大小排序推导得出。因此,为快速找到新顺序中的字符,可以对其设定标识进行维护,主要为数字标识,因为数字形式好理解,但也可以是其他任意形式,只要能和洗牌后的字符一一对应起来就行。

在图3中,洗牌后的这62个字符,每个字符可以对应一个数字标识,例如原先A,B,C,D…对应于0,1,2,3,…;现在R,S,T,b,…对应于0,1,2,3,…,该数字标识可以位于字符的下角标位置(也可以是其他位置),由数字0-61组成。

结合图2,对于落到放号器1的第一个请求,号码值为1,所得索引值为1,相应的号码牌为S;对于落到放号器2的第二个请求,号码值为10000,所得索引值为2(38)(56),相应的号码牌为Tkc(图中范围有限,有些数值未标出)。

另外,号码牌相当于URL里的参数,对于该参数,通常数量不会太少,例如有6位。而索引值可能位数不够,例如,1、2(38)(56)。因此,可以对其进行补位操作,满足链接参数数量的要求,具体地,可以有两种方式:

1)索引值——号码牌之前,先对索引值进行补位,且前置补位

例如,对于索引值1,补位后得到000001;对于2(38)(56),补位后得到0002(38)(56)。根据图3,数字标识0对应于字符R,因此可得号码牌RRRRRS和RRRTkc。

需要说明的是,不同的打乱顺序方式中,数字标识0所对应字符不一定是R,本发明以R进行说明(参见图3)。

2)索引值——号码牌之后,对号码牌进行补位,同样为前置补位

例如,对于索引值1,对应的号码牌为S,前置空缺部分均补位为数字标识0对应的R,因此最终所得号码牌为RRRRRS;同理于索引值10000,得到号码牌RRRTkc。

以此类推,放号器所放出的号码牌,对于用户来讲都是伪随机的,即重复性较小,整体如图4所示。

短链接是一个链接形式,需要有自己的协议和域名,通常是服务提供商提供,例如:A服务商的t.cn,B服务商的3.cn。那么所得短链接形式就是http://t.cn/xxxxxx、http://3.cn/xxxxxx。

需要说明的是,上述负载均衡、放号器以及确定号码牌,也都可以融合到一个装置中进行,但为了更能详尽描述各部分的具体实施过程,本发明将其分开进行说明。

上述实施例所提供的方法,采取单机存储维护待分配的号码,通过集群随机分配算法实现单机发号,进而实现伪随机放号生成短链接。整体既避免了短链接碰撞的情况,也解决了短链接字符连续的问题,具有一定的实现意义。

参见图5,示出了根据本发明实施例的一种可选的短链接生成方法流程示意图,包括如下步骤:

S501:根据预定周期,将放号装置所包含的号码范围以及当前已分配的号码信息存储至目标存储中;

S501’:若检测到所述放号装置关闭、且未达到预定周期,则将所述放号装置所包含的号码范围以及当前已分配的号码信息存储至所述目标存储中;

S502:接收短链接生成请求,确定短链接生成请求的编号,分配短链接生成请求至与编号相应的放号装置中;其中,短链接生成请求包括长链接;

S503:若检测到放号装置启动,则根据放号装置的装置标识,从目标存储中获取放号装置所包含的号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至短链接生成请求的号码;

S504:确定与号码相应的号码牌,结合长链接中的协议和域名,生成与长链接相应的短链接。

上述实施方式中,步骤S502、S504可分别参见图1所示步骤S101、S103的描述,在此不再赘述。

上述实施方式中,对于步骤S501、S501’以及S503,每台放号器所存储的号码有限,当系统/放号器重启后,若没有对之前已分配号码的保存,放号器就不知道自己之前已经放到第几号(顺序分发)、或者分发了哪些号码(随机分发)。

例如,放号器中包含100个号码,已经放出去10个号码。重启后,若不知道之前已经放到第10个号码了,为避免链接碰撞,剩余的90个号码就会丢弃,较为浪费。

需要说明的是,系统重启不是必要的,但是对于平常所使用的系统,经常会重启。但重启后的系统,内存中的信息就会丢失,而存储于本地缓存中的数据,其实就是存储于内存中。

针对上述情况,可以将放号器中已经分发的号码信息传输至目标存储中,具体地,本地磁盘中。

1)定时存储:例如,每隔两小时将已经分发的号码传输至目标存储中;

2)关闭时的同时存储:例如,系统运行过程中宕机了,得关机重启,放号器在接收到关机的指令时,采用钩子机制,写入当前执行的号码/已经分配的号码至本地缓存和磁盘中。类似于电脑关机时候,word自动保存文字操作。

这里的钩子机制仅仅是示意性举例,目的在于系统重启的时候,写入磁盘一个数字,告知放号器当前已经放到第几个号码了。凡是可以做到这个功能的都可以,因为钩子是JAVA自带的一种机制,因此本发明以钩子机制进行举例。

接上例,对于已经放出10个号码的放号器,在其周期性/关机时候,将10这个数字、或者已经放出的10个号码写入磁盘中,下次就从10开始放号,这样原先剩余的90个号码就不至于被浪费。

当然,有一些特殊情况导致放号器来不及存储已经放出的号码信息(例如断电),为避免系统重启后直接按照上次所存储的号码继续进行后续进程,此时需要将其从中心放号器所获取的号码全部剔除掉。

例如,放号器已经顺序分发10个号码,并且已周期性存储到目标存储中了,但在下一个周期来临之前,已经分发出去5个号码,但突然断电了。若系统重启后,会直接按照号码11开始分发,那么对于11~15这个号码,所得到的短链接参数就是重复的,对于后续的系统维护带来不利影响,且可能造成用户体验差的问题。针对这种情况,本着成本最小化,可以将原先90个号码都删除掉。

进一步的,将号码写入磁盘特别耗费系统性能,若每次请求都要写入,对于目前高并发的流量来讲并没有意义。所以只有在重启的时候写入,等下次重启了,就直接从已经发放了的第几个号码之后开始发放。

本地缓存里存储的是第几个号码,相当于是一个本地计数器。虽每次系统重启都是优先从缓存中读取,但若缓存中没有,是要从本地磁盘中读取的;若磁盘也没有(例如,磁盘格式化),则需要从中心放号器重新获取号码,此时的号码是中心放号器还没有发放过的号码。

需要说明的是,本地缓存中的数据可以丢失,因为丢失了也可以在持久化存储中重新拿到。但对于持久化存储中的数据,若丢失了,就相当于是把之前已经排好顺序的一个数组都丢失了,就放号器中的号码分发就没有顺序了,也就失去了放号器的意义了。

另外,当单机放号器中的号码发放完毕后,也需要重新从中心放号器获取M个号码,以继续后续号码发放处理,例如,1000~1100、1200~1300。

对于图2和图3所得洗牌后的字符和数字标识,也可以加载到本地缓存一份;同时为保证数据持久性,可以加载到外部存储,例如关系型数据库或者磁盘,在系统重启后,重新加载。

上述实施例所提供的方法,通过将放号器中已分配的号码写入磁盘中进行记录,保证后续号牌的使用,尤其是在系统重启的时候,有效解决了号码浪费问题。

参见图6,示出了根据本发明实施例的另一种可选的短链接生成方法流程示意图,包括如下步骤:

S601:接收短链接生成请求;其中,所述短链接生成请求包括长链接;

S602:获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

S603:确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接;

S604:通过消息摘要方式,对所述长链接中的协议、域名和参数进行加密,得到加密后的加密串,并建立所述加密串与所述短链接的对应关系。

上述实施方式中,步骤S601~S602可分别参见图1所示步骤S101~S103的描述,在此不再赘述。

上述实施方式中,对于步骤S604,对于短链接系统,所维护的短链接数量通常较大,且各大系统通常会维护两份索引:短链接->长链接、长链接->短链接。

长链接->短链接的索引,是为了排重,即遇到重复的长链接,可以直接返回之前所生成的短链接,从而避免重复生成短链接造成的空间浪费,具体参见图4所示。但问题随之而来,因为维护两份索引的成本较大。

本发明基于MD5特性,对请求中的长链接行拆解。其中,MD5特定包括:①高度离散,没有规律可循;②固定长度,相同MD5可能性非常低;③相同的URL转换出来的MD5是相同的。因此对于相同的长链接,需维护一个索引,而有的长链接特别长,所以将其转换成MD5存储,以降低其对存储空间的占用。

该过程可以视为是长链接->短链接的优化,目的在于用户访问同一个长链接时,所生成的短链接是相同的。

当有短链接生成请求接入时,首先拆解请求中的长链接,将其分解为协议、域名、参数这3个部分。例如,所输入的长链接为:www.xx.com/yy.html?param1=dddd¶m2=bbbb¶m3=bbbb,拆分结果为host:www.xx.com、path:yy.html、参数:param1=dddd、param2=bbbb和¶m3=bbbb。

本地维护有序队列,分别将协议、域名、参数根据一定规则(例如,首字母)重新排序,例如,对于参数,重新排序后的结果为param2=bbbb、param1=dddd,其中param3因为和param2一样,就去除了。若不去除,所得排序结果为param2=bbbb、param3=bbbb、param1=dddd。

对排序后的数据做MD5加密,得到一个加密后的字符串,即加密串。根据MD5特性,如果再来一个跟这个长链接一样的链接,那拆解完重新组装后,所得到的加密串一定是一样的。

进一步的,加密串的长度,其长度通常是小于原先长链接的长度。因为对于链接,有http协议头、//这种无用的东西。

对于优化后的加密串->短链接的关系,通常是在分布式缓存中存储维护。每次请求的时候,都需要校验分布式缓存中是否存在该加密串,如果存在,则直接返回相应的短链接,不需要再次生成。

上述实施例所提供的方法,长链接存储采取对其拆解排序和组装MD5的方式,缩短了链接长度,减少了对存储空间的占用,并降低了索引成本。且对于同一个长链接,所生成短链接是相同的,通过对长链接生成加密串的方式,当后续对于该长链接的访问为同一个,则返回之前所生成的短链接,不会再去重新生成一份。

参见图7,示出了根据本发明实施例的又一种可选的短链接生成方法流程示意图,包括如下步骤:

S701:接收短链接生成请求;其中,所述短链接生成请求包括长链接;

S702:获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

S703:确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接;

S704:在预定时长内是否收到对所述短链接和/或所述长链接的访问请求;

S705:没有收到,确定所述短链接和所述长链接为冷数据;

S705’:有收到,确定所述短链接和所述长链接为热数据。

上述实施方式中,对于步骤S701~S703,可参见图1所示步骤S101~S103的描述,在此不再赘述。

上述实施方式中,对于步骤S704、S705以及S705’,这里主要讲述短链接生成后如何存储的问题。

为保证数据的安全,数据一般采取双写的方式,即一份热数据一份冷数据。热数据就是经常被访问的数据,而冷数据则表示一段时长内都没有被访问过,两者可以通过短链接/长链接的访问度进行判断。

对于热数据有个过期时间,假设过期时间为1天,如果过去一天内该短链接和/或长链接都没被访问过,则将该热数据删除,仅保留存储于关系型数据库的冷数据。

上述方式,双写方式可以保证数据的不丢失,但是对于系统内存具有一定的占用。除上述方式外,还可以有其他方式,例如:

通常刚生成的短链接->长链接会打标签为热数据,并存储在分布式缓存中。假设过期时间为1天,如果过去一天内该短链接和/或长链接都没被访问过,则确认其为冷数据,并写入关系型数据库或非关系型数据库中。但若有被访问,则继续将其确认为热数据,并继续根据过期时间以及是否访问进行判断,若继续有被访问,则继续刷新。

但需要说明的是,冷数据也是数据,不能因为没人用这个链接而将其剔除掉。当系统存储容量足够大的时候,可以存储冷数据任意长时间;但若系统存储量有限,而该数据确实比较大,可以舍弃掉,一减少空间耗费。

对于长链接的访问,可以直接跳转到该页面。本发明主要说明其短链接,当有访问请求进来时,通过分布式缓存获取到相应的长链接,实现链接跳转。

但当系统bug或操作不当时,分布式缓存中的部分短链接/长链接可能会被删除掉,针对这种方式:

1)访问关系型数据库或非关系型数据库,若存在则返回数据,并写入分布式缓存中;

2)若不存在,为避免缓存穿透,则该访问请求进行短时间(例如1小时、1分钟)本地缓存;

这里的缓存穿透是基于系统安全考虑,因为有些输入的短链接其实根本就不存在,而不存在的短链接是最耗费系统性能的事情,但用户在一直不停刷,容易把系统刷爆或者宕机。

进一步的,对于所得到的短链接,可以单个维护,例如一段时长刷新一次,也可以多个短链接一起组队刷新。

为避免链接被访问时,因为维护短链接所组成的队列,而导致性能访问受影响,当队列中的短链接数量达到一定阈值时,例如100个,再统一刷新过期时间,进而实现将分布式缓存中的数据统一为热数据,避免了每个链接都要刷新一遍导致网络的过度消耗。

同样,对于图6中的加密串,可以基于LRU(Least Recently Used,最近最久未使用)方式进行筛选。加密串在本地形成指定大小的有序队列,若加密串经常被访问,则可以将其移动至队首,形成热点数据,且当达到有序队列上限的时候(上限值具体可以由业务方、系统容量确定),自动移除队尾数据,因为队尾数据基本不怎么被调用,证明用户对其需求量较小,以此实现对经常访问的热点数据的维护。

上述实施例所提供的方法,短链接存储刷新过期时间,并采用异步刷新热数据的方式,避免对正常的业务性能造成影响。

本发明实施例所提供的方法,针对于现有短链接生成方式的痛点,采取放号器方式避免数据碰撞,并通过单机缓存号牌的机制,基于在分布式的集群环境,随机或顺序分发机制,实现短链接的伪随机。通过对长链接的拆解,并利用MD5特性生成加密串,维护了MD5->短链接的关系,降低索引成本。

参见图8,示出了本发明实施例提供的一种短链接生成装置800的主要模块示意图,包括:

请求接收模块801,用于接收短链接生成请求;其中,所述短链接生成请求包括长链接;

号码分配模块802,用于获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

链接生成模块803,用于确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接。

本发明实施装置中,所述请求接收模块801,还用于:确定所述短链接生成请求的编号,分配所述短链接生成请求至与所述编号相应的放号装置中。

本发明实施装置还包括号码存储模块804(图中未标出),用于:

根据预定周期,将放号装置所包含的号码范围以及当前已分配的号码信息存储至目标存储中;和/或

若检测到所述放号装置关闭、且未达到所述预定周期,则将所述放号装置所包含的号码范围以及当前已分配的号码信息存储至所述目标存储中;

所述号码分配模块802,用于:

若检测到所述放号装置启动,则根据所述放号装置的装置标识,从所述目标存储中获取所述放号装置所包含的号码范围以及当前已分配的号码信息。

本发明实施装置中,所述链接生成模块803,用于:通过预定进制表,转换所述号码为相应的索引值;根据索引值与号码牌的对应关系,得到与所述索引值相应的号码牌。

本发明实施装置中,所述索引值由数字标识组成,所述号码牌由字符组成;

所述链接生成模块803,用于:

通过洗牌方式,调整各个字符的排序,并按序添加数字标识至排序后的各个字符中,以建立数字标识与字符的对应关系。

本发明实施装置中,所述长链接还包括参数;

所述链接生成模块803,还用于:通过消息摘要方式,对所述长链接中的协议、域名和参数进行加密,得到加密后的加密串,并建立所述加密串与所述短链接的对应关系。

本发明实施装置还包括链接处理模块805(图中未标出),用于:若在预定时长内未接收到对所述短链接和/或所述长链接的访问请求,则确定所述短链接和所述长链接为冷数据。

另外,在本发明实施例中所述的短链接生成装置的具体实施内容,在上面所述短链接生成方法中已经详细说明了,故在此重复内容不再说明。

图9示出了可以应用本发明实施例的示例性系统架构900。

如图9所示,系统架构900可以包括终端设备901、902、903,网络904和服务器905(仅仅是示例)。网络904用以在终端设备901、902、903和服务器905之间提供通信链路的介质。网络904可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端设备901、902、903通过网络904与服务器905交互,以接收或发送消息等。终端设备901、902、903上可以安装有各种通讯客户端应用。

终端设备901、902、903可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

服务器905可以是提供各种服务的服务器,例如对用户利用终端设备901、902、903所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果反馈给终端设备。

需要说明的是,本发明实施例所提供的短链接生成方法一般由服务器905执行,相应地,短链接生成装置一般设置于服务器905中。

应该理解,图9中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。

下面参考图10,其示出了适于用来实现本发明实施例的终端设备的计算机系统1000的结构示意图。图10示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图10所示,计算机系统1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM 1003中,还存储有系统1000操作所需的各种程序和数据。CPU 1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。

以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。

特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(CPU)1001执行时,执行本发明的系统中限定的上述功能。

需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括请求接收模块、号码分配模块、链接生成模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,请求接收模块还可以被描述为“短链接生成请求接收模块”。

作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:

接收短链接生成请求;其中,所述短链接生成请求包括长链接;

获取号码范围以及当前已分配的号码信息,结合预定号码分配方式,得到分配至所述短链接生成请求的号码;

确定与所述号码相应的号码牌,结合所述长链接中的协议和域名,生成与所述长链接相应的短链接。

根据本发明实施例的技术方案,针对于现有短链接生成方式的痛点,采取放号器方式避免数据碰撞,并通过单机缓存号牌的机制,基于在分布式的集群环境,随机或顺序分发机制,实现短链接的伪随机。通过对长链接的拆解,并利用MD5特性生成加密串,维护了MD5->短链接的关系,降低索引成本。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

相关技术
  • 一种短链接生成方法、装置、设备及存储介质
  • 一种短链接生成方法和装置
技术分类

06120112740396