java短鏈接生成方法

這里列出兩種短鏈接生成的方法供有需要的朋友參考。

方法一

這種方法的的缺點很明顯。
1. 缺點一
必須指定短鏈接的長度(for循環(huán)的次數(shù)即是短鏈的長度)。一旦設(shè)置,如果占用滿,將需要更改代碼重新發(fā)布。不利于維護(hù)
2. 缺點二
會發(fā)現(xiàn)這個代碼只是生成key,與本身要生成的鏈接沒有任何關(guān)系,所以需要手動記錄key與value的對應(yīng)關(guān)系。比如記錄到redis中。(其實個人并并不認(rèn)為這是個缺點,短鏈接要考慮的一個場景就是過期)

private static final char[] BASE_62_CHARS = "abcdefghzjklmnopqrstuvwxyzABCDEFGHZJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
private static final int BASE_62_CHARS_LENGTH = BASE_62_CHARS.length;
public static String method1(){
    StringBuffer sb = new StringBuffer();
    Random random = new Random();
    for(int i = 0; i < 6; i++) {
        int index = random.nextInt(BASE_62_CHARS_LENGTH);
        sb.append(BASE_62_CHARS[index]);
    }
    return sb.toString();
}

方法二

這個是基于方法一的改進(jìn)方法,主要修復(fù)的是缺點一。
引入了一個增量變量startIndex,每次生成后對該增量變量進(jìn)行累計1,使用redis來存儲startIndex是個很好的解決方案。
該方法同樣存在缺點2。但是優(yōu)點在設(shè)置了startIndex后,該代碼不需要再維護(hù),短鏈接的長度會隨著startIndex的遞增而增加。

private static final char[] BASE_62_CHARS = "abcdefghzjklmnopqrstuvwxyzABCDEFGHZJKLMNOPQRSTUVWXYZ0123456789".toCharArray();
private static final int BASE_62_CHARS_LENGTH = BASE_62_CHARS.length;
public static void main(String[] args) {
    int startIndex= 10000;
    System.out.println(formBase10(startIndex));
}
public static String formBase10(long i){
    StringBuffer sb = new StringBuffer();
    if(i == 0){
        return "a";
    }
    while (i > 0){
        i = formBase10(i, sb);
    }
    return sb.toString();
}
public static long formBase10(long i, StringBuffer sb){
    int rem = (int)(i % BASE_62_CHARS_LENGTH);
    sb.append(BASE_62_CHARS[rem]);
    long r = (i / BASE_62_CHARS_LENGTH);
    return r;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • MySQL的執(zhí)行過程 Redis、Memcached、MySQL 內(nèi)存管理機(jī)制Memcached默認(rèn)使用Slab ...
    hellomyshadow閱讀 390評論 0 0
  • 1.1 資料 ,最好的入門小冊子,可以先于一切文檔之前看,免費。 作者Antirez的博客,Antirez維護(hù)的R...
    JefferyLcm閱讀 17,293評論 1 51
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴(kuò)展、高可用、大數(shù)據(jù)存儲問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,708評論 0 36
  • 包含的重點內(nèi)容:JAVA基礎(chǔ)JVM 知識開源框架知識操作系統(tǒng)多線程TCP 與 HTTP架構(gòu)設(shè)計與分布式算法數(shù)據(jù)庫知...
    消失er閱讀 4,544評論 1 10
  • 進(jìn)程間通信(IPC,Inter-Process Communication),指至少兩個進(jìn)程或線程間傳送數(shù)據(jù)或信號...
    百里求一閱讀 4,326評論 0 3

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