短鏈結服務實踐

2021-10-07 13:45:14 字數 2870 閱讀 1980

**實現

功能擴充套件

分布式高可用

其他目標

經過網上的查詢和參考,大致兩種方式。

第二種方式:系統內自己實現。

具體實現,需要看業務場景。

推薦參考這篇文章:如何將乙個長url轉換為乙個短url? 細節的實現方式,就直接看這篇文章就行。

或者直接看:

具體**參考: 中 fun.gengzi.codecopy.business.shorturl 下的**

資料庫:resources/db/shorturl.sql

jmeter測試指令碼:resources/shorturltest.jmx

public

inte***ce

shorturlgeneratorservice

/**

* 返回短鏈結

* // 判斷當前長連線能否在redis 查詢到,查詢到直接返回短鏈結,並更新這個key value 的過期時間為1小時

* // 不是,呼叫redis邏輯發號器

* // 返回號碼,作為資料庫的主鍵,檢測主鍵是否衝突,衝突重新嘗試拿新的號碼(也可以不驗證是否主鍵衝突,只要能保證發號器發的號碼是唯一的)

* // 將長連線和號碼繫結,將10進製的號碼,轉換為62進製

* // 組拼短鏈結,設定超時時間

* // 存入資料庫

* // 存入redis,key value 的形式,key 62進製id ,對應乙個長連線,如果數量太多,可以設定乙個失效時間(比如 三天),防止redis中快取太多

* // 再次存入reids, key value 的形式,長連線,對應乙個 短鏈結的62進製,設定失效時間是 1 小時,當同乙個長鏈結再來,就可以直接從redis中返回

* // 返回

** @param longurl 普通鏈結

* @return

*/@transactional

@override

public string generatorshorturl

(string longurl)

", longurl)

;// 判斷當前連線不能為null 或者 " "

if(stringutils.

isnoneblank

(longurl))"

, linkurlpre + shorturl)

;return linkurlpre + shorturl;

}else

", genshorturl)

;return genshorturl;}}

return"";

}

controller:

@apioperation

(value =

"短鏈結跳轉服務"

, notes =

"短鏈結跳轉服務"

)@apiimplicitparams()

("/u/"

)public string redirecturl

(@pathvariable

("shorturl"

) string shorturl)

", system.

currenttimemillis()

);string longurl = shorturlgeneratorservice.

getlongurl

(shorturl)

;return

"redirect:"

+ longurl;

}

service:

/**

* 返回長鏈結

* // 判斷當前連線能否在redis 查詢到,查詢到直接返回長連線

* // 將62進製,轉為10進製

* // 判斷返回長連線是無,則在資料庫中查詢

** @param shorturl 短鏈結

* @return 長鏈結

*/@override

public string getlongurl

(string shorturl)

long shorturlid = baseconversionutils.

radixstring

(shorturl)

; shorturl shorturl = shorturlgeneratordao.

getone

(shorturlid);if

(shorturl != null)

return"";

}

增加快取層,使用nosql資料庫,將經常頻繁轉換的長鏈結和短鏈結存入,並設定過期時間,每轉換一次更新一次時間。(有了)

增加鏈結時效性的校驗,判斷過期,則跳轉到提示頁面,提示活動已過期

增加介面認證,對於授權的使用者,才能呼叫長鏈結轉短鏈結服務,記錄呼叫次數,記錄ip,限制呼叫次數,防止惡意使用者刷介面

短鏈結重定向302,記錄一下行為資料,使用者的ip,使用的終端,地區等等,這些資料用於優化以後的業務場景

短鏈結的業務區分,比如 http://網域名稱/s/ua3x 這個通過 s 標識特定的一種場景

對於分享型的鏈結,可以將分享人資訊也脫敏處理後,追加短鏈結的後面,來進行一些業務統計。

之前使用的發號器(就是生成資料庫id的策略),我們使用了單redis自增序列發號器,分段redis自增序列發號器。這些在分布式和高併發下並不適用,所以可以使用,分布式發號器來生成id,可以參考 雪花演算法,或者是開源的全域性id生成器。

對於長鏈結,短鏈結的儲存,如果資料量比較大,對於單錶的查詢和更新都是緩慢的。讀寫分離,分庫分表,或者採用別的方式儲存

//todo 等我實踐到這裡,再看需要什麼方案

微服務實踐歷程

微服務概念的出現已經有很多年了,有多少公司在真正使用微服務,今天就把我這幾年對微服務的一點感受和大家分享下 首先,在系統建立之初,有乙個問題,到底要不要按照微服務的架構來開始專案?這個時候如果我們是接觸的乙個比較熟悉的行業 熟悉的業務,或者說業務架構師對這一行比較了解,那麼可以考慮進行微服務的設計,...

短鏈服務架構實踐

1.儲存採用redis做資料儲存 2.id keyword long url hset key long url id keyword long url 3.md5 long url id keyword hset key short url md5 long url id keyword 用來判斷...

Abp vNext微服務實踐 服務通訊

服務通訊是微服務架構中必不可少的功能,服務通訊的效率決定了微服務架構的優略。常用的微服務通訊策略有兩種,分別是rpc http,其中rpc以grpc框架為代表使用者最多。abp vnext微服務架構中當然也有服務通訊策略,採用的是http方式進行服務通訊。雖然grpc高效安全,但是相關的.net框架...