鎖與事務(wù)

最近在寫一個(gè)短鏈服務(wù),提供兩個(gè)API給用戶使用,一個(gè)API用于生成短鏈,一個(gè)API用于根據(jù)短鏈獲取長(zhǎng)鏈接。

生成短鏈的實(shí)現(xiàn)原理是把數(shù)據(jù)庫(kù)表的遞增ID根據(jù)規(guī)則轉(zhuǎn)換為4到7個(gè)字母數(shù)字組合。該組合作為長(zhǎng)鏈接的key,利用數(shù)據(jù)庫(kù)的主鍵保證了長(zhǎng)鏈接和key的唯一性。

數(shù)據(jù)庫(kù)主鍵id是十進(jìn)制的數(shù)字。字母數(shù)字的組合加上大小寫字母一共有62位,所以轉(zhuǎn)換規(guī)則就是把10進(jìn)制的ID轉(zhuǎn)換為62進(jìn)制。具體做法就是循環(huán)對(duì)62進(jìn)行取余,每次取余之后都除以62直到等于零。100萬的十進(jìn)制數(shù)會(huì)對(duì)應(yīng)4個(gè)字母數(shù)字組合,1億的十進(jìn)制數(shù)對(duì)應(yīng)5個(gè),100億對(duì)應(yīng)6個(gè),1萬億對(duì)應(yīng)7個(gè),足夠使用了。

具體生成短鏈的過程時(shí)用戶過來一個(gè)請(qǐng)求時(shí),先把保存一條記錄到數(shù)據(jù)庫(kù)中,然后獲取該記錄的ID,進(jìn)行轉(zhuǎn)換,獲取字母數(shù)字組合,再保存到數(shù)據(jù)庫(kù)中。

在測(cè)試的時(shí)候發(fā)現(xiàn)這樣的做法只能支持每秒3個(gè)用戶同時(shí)進(jìn)行訪問,用戶多時(shí)就會(huì)由于在數(shù)據(jù)庫(kù)中給短鏈設(shè)置了唯一索引而報(bào)錯(cuò),因?yàn)橥瑫r(shí)保存了空值到數(shù)據(jù)庫(kù)中。

之后考慮添加事務(wù)進(jìn)行解決,在插入記錄會(huì)出現(xiàn)MySQL error “Deadlock found when trying to get lock; try restartingtransactionn,性能幾乎沒有提升。

最后加入ReentrantLock鎖,在保存數(shù)據(jù)庫(kù)之前加鎖,更新數(shù)據(jù)庫(kù)成功之后進(jìn)行解鎖,性能得到了提升,本機(jī)測(cè)試每秒200個(gè)用戶同時(shí)訪問沒有出現(xiàn)失敗的情況。

參考銜接

https://javadoop.com/post/url-shortener

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,306評(píng)論 2 89
  • 一 綜述 MySQL 的鎖機(jī)制相較其他的數(shù)據(jù)庫(kù)比較簡(jiǎn)單,最顯著的特點(diǎn)是不同的存儲(chǔ)引擎支持不同的鎖機(jī)制。主要有三種類...
    柯基去哪了閱讀 3,347評(píng)論 3 7
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,974評(píng)論 0 9
  • 【自我介紹】 1.基本情況: 大家好,我是來自武漢的錢彩虹,我應(yīng)該是和秋葉老師年齡差不多,也都是大學(xué)老師,從事的是...
    錢姐姐閑話閱讀 354評(píng)論 0 0
  • 一覺睡到早上6點(diǎn)半,起來神清氣爽一切晴朗。早上美媽給我們泡了一杯泡面,帶上三明治(午飯沒別的就是三明治),蘋果橙子...
    阿炫要做一個(gè)溫暖的人閱讀 246評(píng)論 0 0

友情鏈接更多精彩內(nèi)容