本發(fā)明涉及即時(shí)通訊領(lǐng)域,特別地,涉及一種短鏈接地址生成方法及系統(tǒng)。
背景技術(shù):
互聯(lián)網(wǎng)應(yīng)用中,基于內(nèi)容的分享、傳播以及獲取的應(yīng)用場景普遍存在。尤其是社交網(wǎng)絡(luò)服務(wù)的廣泛應(yīng)用,使基于用戶關(guān)系的信息傳播更為方便。但是這種信息傳播方式普遍存在字?jǐn)?shù)限制的問題。為了承載更多信息量,通常分享的內(nèi)容中附加短URL(Uniform Resource Locator:統(tǒng)一資源定位器)鏈接地址以減少目標(biāo)URL過長導(dǎo)致占用有效字?jǐn)?shù)問題。
短網(wǎng)址服務(wù)可以把一個(gè)長網(wǎng)址縮短,方便用戶在社交網(wǎng)絡(luò)和微博甚至是手機(jī)短信分享鏈接。例如,可以把這樣一個(gè)長網(wǎng)址:
http://xue.neuedu.cn/ec_mbrowse/lrbrowse/coursemobile?resourceId=002903c6-8234-4a9c-a708-32a70dfafas4a8&isappinstalled=false
縮短成這樣一個(gè)短網(wǎng)址:
http://neuedu.cn/awD5d
相對于長網(wǎng)址,短網(wǎng)址可以更方便地通過社交網(wǎng)絡(luò)、微博和手機(jī)上傳播,避免折行或超出字符限制。
目前的可行技術(shù)方案多集中于把目標(biāo)URL字符串通過hash離散運(yùn)算,變換成固定長度的輸出,進(jìn)而來表達(dá)唯一結(jié)果與目標(biāo)URL進(jìn)行關(guān)聯(lián)。然而,這種轉(zhuǎn)換是一種有損的壓縮映射,散列值的空間通常遠(yuǎn)小于輸入的空間,不同的輸入可能會散列成相同的輸出,所以不可能從散列值來唯一的確定輸入值。短鏈接數(shù)量與發(fā)生碰撞的可能性成正相關(guān),也即是短鏈接的長度通常在4~7個(gè)字符長度,hash函數(shù)的值域過小,隨著短鏈接數(shù)量的增加,發(fā)生碰撞的可能性會逐漸增大,從而降低系統(tǒng)可用性。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種短鏈接地址生成方法及系統(tǒng),以解決現(xiàn)有的短鏈接生成方式隨著數(shù)量增加容易產(chǎn)生碰撞,進(jìn)而導(dǎo)致系統(tǒng)可用性低的技術(shù)問題。
本發(fā)明采用的技術(shù)方案如下:
根據(jù)本發(fā)明的一個(gè)方面,提供一種短鏈接地址生成方法,包括:
接收鏈接地址轉(zhuǎn)換請求,將原始URL基于散列算法生成對應(yīng)的哈希值;
判斷內(nèi)存緩存是否存在與哈希值匹配的短鏈接地址,若有則直接返回該短鏈接地址;否則,從短鏈接資源池中取用一個(gè)資源,生成短鏈接地址,將新生成的短鏈接地址返回并保存至內(nèi)存緩存;
其中,短鏈接資源池為根據(jù)短鏈接地址資源需求對應(yīng)的生成策略創(chuàng)建,生成策略包括選定的編碼字符集和短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度,短鏈接資源池通過改變唯一標(biāo)識字符串長度來進(jìn)行資源擴(kuò)展。
進(jìn)一步地,本發(fā)明短鏈接地址生成方法還包括對短鏈接資源池的資源消耗進(jìn)行監(jiān)測,包括:
判斷短鏈接資源池的資源消耗是否達(dá)到閾值,若是則啟動資源消耗告警,并手動或者自動對短鏈接資源池進(jìn)行資源擴(kuò)展。
進(jìn)一步地,短鏈接資源池的創(chuàng)建包括:
選定短鏈接地址對應(yīng)的編碼字符集;
設(shè)定短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度;
通過迭代算法生成順序的唯一標(biāo)識字符串資源列表;
通過洗牌算法生成亂序的唯一標(biāo)識字符串資源列表并存儲。
進(jìn)一步地,唯一標(biāo)識字符串長度根據(jù)短鏈接地址需求量設(shè)定,具體為:
Q≤B^n,其中,Q表示短鏈接地址需求量,B表示短鏈接地址對應(yīng)的編碼字符集包含的字符數(shù)量,n表示短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度,^表示冪運(yùn)算。
進(jìn)一步地,短鏈接資源池內(nèi)的資源經(jīng)環(huán)形緩沖區(qū)緩存后被提取。
根據(jù)本發(fā)明的另一方面,還提供一種短鏈接地址生成系統(tǒng),包括:
接收模塊,用于接收鏈接地址轉(zhuǎn)換請求,將原始URL基于散列算法生成對應(yīng)的哈希值;
轉(zhuǎn)換模塊,用于判斷內(nèi)存緩存是否存在與哈希值匹配的短鏈接地址,若有則直接返回該短鏈接地址;否則,從短鏈接資源池中取用一個(gè)資源,生成短鏈接地址,將新生成的短鏈接地址返回并保存至內(nèi)存緩存;
其中,短鏈接資源池為根據(jù)短鏈接地址資源需求對應(yīng)的生成策略創(chuàng)建,生成策略包括選定的編碼字符集和短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度,短鏈接資源池通過改變唯一標(biāo)識字符串長度來進(jìn)行資源擴(kuò)展。
進(jìn)一步地,本發(fā)明短鏈接地址生成系統(tǒng)還包括:
資源池管理模塊,用于對短鏈接資源池的資源消耗進(jìn)行監(jiān)測,包括:判斷短鏈接資源池的資源消耗是否達(dá)到閾值,若是則啟動資源消耗告警,并手動或者自動對短鏈接資源池進(jìn)行資源擴(kuò)展。
進(jìn)一步地,本發(fā)明短鏈接地址生成系統(tǒng)還包括:
短鏈接訪問模塊,用于接收短鏈接訪問請求,將接收的短鏈接地址映射到原始URL并跳轉(zhuǎn)。
進(jìn)一步地,短鏈接資源池內(nèi)的資源經(jīng)環(huán)形緩沖區(qū)緩存后被提取。
本發(fā)明具有以下有益效果:
本發(fā)明短鏈接地址生成方法及系統(tǒng),根據(jù)選定的編碼字符集及短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度創(chuàng)建資源可擴(kuò)展的短鏈接資源池,對接收的鏈接地址轉(zhuǎn)換請求進(jìn)行處理,先從內(nèi)存緩存中檢索是否存在匹配的短鏈接地址,若否,則通過調(diào)用短鏈接資源池生成短鏈接地址,返回短鏈接地址并保存至內(nèi)存緩存中,既提高了短鏈接地址檢索轉(zhuǎn)換速度,又有效避免了由于哈希函數(shù)的值域過小引起的碰撞可能性增大的問題,從而提高了系統(tǒng)的可用性。
除了上面所描述的目的、特征和優(yōu)點(diǎn)之外,本發(fā)明還有其它的目的、特征和優(yōu)點(diǎn)。下面將參照圖,對本發(fā)明作進(jìn)一步詳細(xì)的說明。
附圖說明
構(gòu)成本申請的一部分的附圖用來提供對本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對本發(fā)明的不當(dāng)限定。在附圖中:
圖1是本發(fā)明優(yōu)選實(shí)施例一短鏈接地址生成方法的流程示意圖;
圖2是本發(fā)明優(yōu)選實(shí)施例一短鏈接地址生成方法的步驟示意圖;
圖3是本發(fā)明優(yōu)選實(shí)施例短鏈接資源池的管理的流程示意圖;
圖4是本發(fā)明優(yōu)選實(shí)施例短鏈接訪問過程的流程示意圖;
圖5是本發(fā)明優(yōu)選實(shí)施例短鏈接地址生成系統(tǒng)的方框示意圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明的實(shí)施例進(jìn)行詳細(xì)說明,但是本發(fā)明可以由權(quán)利要求限定和覆蓋的多種不同方式實(shí)施。
實(shí)施例一:
本發(fā)明的優(yōu)選實(shí)施例一提供了一種短鏈接地址生成方法,其基于通過指定字符集生成短鏈接資源池的增量式短鏈接地址生成方法,有效避免由于哈希函數(shù)的值域過小引起的碰撞可能性增大的問題。參照圖1,本實(shí)施例短鏈接地址生成方法包括:
步驟S101,接收鏈接地址轉(zhuǎn)換請求,將原始URL基于散列算法生成對應(yīng)的哈希值;
作為一種較佳的方式,服務(wù)器接收到客戶端發(fā)送的鏈接地址轉(zhuǎn)換請求后,采用MD5散列算法基于原始URL生成一個(gè)hash值。
步驟S102,判斷內(nèi)存緩存是否存在與哈希值匹配的短鏈接地址,若有則執(zhí)行步驟S103,否則執(zhí)行步驟S104;
本實(shí)施例通過增加在內(nèi)存緩存檢索的方式,提高了短鏈接地址檢索速度。作為一種較佳的方式,服務(wù)器采用分布式內(nèi)存緩存的方式來檢索與哈希值匹配的短鏈接地址。
步驟S103,返回檢索到的與哈希值匹配的短鏈接地址;
當(dāng)在分布式內(nèi)存緩存中檢索到與哈希值匹配的短鏈接地址,則直接返回短鏈接地址給客戶端。
步驟S104,從短鏈接資源池中取用一個(gè)資源,生成短鏈接地址;
本實(shí)施例中,短鏈接資源池為根據(jù)短鏈接地址資源需求對應(yīng)的生成策略創(chuàng)建,生成策略包括選定的編碼字符集和短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度,短鏈接資源池通過改變唯一標(biāo)識字符串長度來進(jìn)行資源擴(kuò)展。
步驟S105,將新生成的短鏈接地址返回并保存至內(nèi)存緩存。
將新生成的短鏈接地址返回給客戶端,同時(shí)將該短鏈接地址與哈希值匹配保存至分布式內(nèi)存緩存中。
本實(shí)施例先從內(nèi)存緩存中檢索是否存在匹配的短鏈接地址,若否,則通過調(diào)用短鏈接資源池生成短鏈接地址,返回短鏈接地址并保存至內(nèi)存緩存中,既提高了短鏈接地址檢索轉(zhuǎn)換速度,又有效避免了由于哈希函數(shù)的值域過小引起的碰撞可能性增大的問題,從而提高了系統(tǒng)的可用性。
圖2示出了本實(shí)施例短鏈接地址生成方法優(yōu)選的步驟示意圖,與圖1所示的步驟一致,優(yōu)選地,參照圖2,短鏈接資源池內(nèi)的資源經(jīng)環(huán)形緩沖區(qū)緩存后被提取。資源緩沖區(qū)采用環(huán)形緩沖區(qū)設(shè)計(jì),用于緩沖短鏈接資源池中的可用短鏈接資源,環(huán)形緩沖區(qū)所有的push和pop操作都是在一個(gè)固定的存儲空間內(nèi)進(jìn)行,相對于隊(duì)列緩沖區(qū)減少了對于緩沖區(qū)元素所用存儲空間的分配、釋放過程。環(huán)形緩沖區(qū)的設(shè)計(jì)有效提升資源取用的效率,提升系統(tǒng)性能。
實(shí)施例二:
實(shí)施例二與實(shí)施例一的區(qū)別在于:實(shí)施例二短鏈接地址生成方法還包括對短鏈接資源池的資源消耗進(jìn)行監(jiān)測,包括:
判斷短鏈接資源池的資源消耗是否達(dá)到閾值,若是則啟動資源消耗告警,并手動或者自動對短鏈接資源池進(jìn)行資源擴(kuò)展。
參照圖3,本實(shí)施例短鏈接資源池的管理包括:
步驟S301,選定短鏈接地址對應(yīng)的編碼字符集;
該編碼字符集符合URL編碼規(guī)則,并且不具特殊含義的字符,具體可參考RFC3986文件。作為一種較佳的方式,采用‘A~Z’,‘a(chǎn)~z’,‘0~9’的62個(gè)字符作為短鏈接地址唯一標(biāo)識字符串的編碼字符集,符合URL編碼規(guī)則并且在URL中不具有特殊含義且易于輸入。
步驟S302,設(shè)定短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度;
唯一標(biāo)識字符串長度根據(jù)短鏈接地址需求量設(shè)定,具體為:
Q≤B^n,其中,Q表示短鏈接地址需求量,B表示短鏈接地址對應(yīng)的編碼字符集包含的字符數(shù)量,n表示短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度,^表示冪運(yùn)算。
例如對于一個(gè)網(wǎng)站或互聯(lián)網(wǎng)應(yīng)用,初期用于資源分享的短鏈接需求量為1000萬,可以計(jì)算出10000000<62^4,那么初期可以選定短鏈接地址唯一標(biāo)識字符串為4個(gè)字符長度。
步驟S303,通過迭代算法生成順序的唯一標(biāo)識字符串資源列表;
此處的迭代算法為現(xiàn)有技術(shù),在此不再贅述。
步驟S304,通過洗牌算法生成亂序的唯一標(biāo)識字符串資源列表;
此處的洗牌算法采用現(xiàn)有的隨機(jī)洗牌算法,在此不再贅述。
步驟S305,存儲至短鏈接資源池;
步驟S306,設(shè)定資源消耗閾值;
步驟S307,判斷資源消耗是否達(dá)到預(yù)設(shè)閾值;若是則執(zhí)行步驟S308;否則執(zhí)行步驟S309;
步驟S308,啟動資源消耗告警,并手動或者自動對短鏈接資源池進(jìn)行資源擴(kuò)展;
此處資源擴(kuò)展包括手動方式和自動方式,其中,手動方式是指在接收到告警信息后,通過手動更改步驟S302中的唯一標(biāo)識字符串長度,以擴(kuò)展資源池中的資源數(shù)量;自動方式是指在生成告警信息后,服務(wù)器自動返回至步驟S302,增加唯一標(biāo)識字符串長度,以擴(kuò)展資源池中的資源數(shù)量。
步驟S309,從短鏈接資源池中提取資源以生成短鏈接地址。
作為一種較佳的方式,短鏈接資源池內(nèi)的資源經(jīng)環(huán)形緩沖區(qū)緩存后被提取。資源緩沖區(qū)采用環(huán)形緩沖區(qū)設(shè)計(jì),用于緩沖短鏈接資源池中的可用短鏈接資源,環(huán)形緩沖區(qū)所有的push和pop操作都是在一個(gè)固定的存儲空間內(nèi)進(jìn)行,相對于隊(duì)列緩沖區(qū)減少了對于緩沖區(qū)元素所用存儲空間的分配、釋放過程。環(huán)形緩沖區(qū)的設(shè)計(jì)有效提升資源取用的效率,提升系統(tǒng)性能。
圖4示出了短鏈接訪問過程的流程示意圖,參照圖4,包括:
步驟S401,接收短鏈接訪問請求;
服務(wù)器接收客戶端發(fā)送的短鏈接訪問請求。
步驟S402,解析短鏈接地址對應(yīng)的唯一標(biāo)識字符串;
步驟S403,檢索短鏈接資源池是否存在與該短鏈接地址對應(yīng)的原始URL,若是則執(zhí)行步驟S404,否則執(zhí)行步驟S405;
步驟S404,重定向到原始URL鏈接地址;
步驟S405,提示不存在。
根據(jù)本發(fā)明的另一方面,還提供一種短鏈接地址生成系統(tǒng),參照圖5,包括:
接收模塊501,用于接收鏈接地址轉(zhuǎn)換請求,將原始URL基于散列算法生成對應(yīng)的哈希值;
轉(zhuǎn)換模塊502,用于判斷內(nèi)存緩存是否存在與哈希值匹配的短鏈接地址,若有則直接返回該短鏈接地址;否則,從短鏈接資源池503中取用一個(gè)資源,生成短鏈接地址,將新生成的短鏈接地址返回并保存至內(nèi)存緩存;
其中,短鏈接資源池503為根據(jù)短鏈接地址資源需求對應(yīng)的生成策略創(chuàng)建,生成策略包括選定的編碼字符集和短鏈接地址對應(yīng)的唯一標(biāo)識字符串長度,短鏈接資源池通過改變唯一標(biāo)識字符串長度來進(jìn)行資源擴(kuò)展。
可選地,本發(fā)明短鏈接地址生成系統(tǒng)還包括:
資源池管理模塊504,用于對短鏈接資源池的資源消耗進(jìn)行監(jiān)測,包括:判斷短鏈接資源池的資源消耗是否達(dá)到閾值,若是則啟動資源消耗告警,并手動或者自動對短鏈接資源池進(jìn)行資源擴(kuò)展。
可選地,本發(fā)明短鏈接地址生成系統(tǒng)還包括:
短鏈接訪問模塊505,用于接收短鏈接訪問請求,將接收的短鏈接地址映射到原始URL并跳轉(zhuǎn)。
需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲在存儲裝置中由計(jì)算裝置來執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。
以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。