java短链接生成方法

这里列出两种短链接生成的方法供有需要的朋友参考。

方法一

这种方法的的缺点很明显。
1. 缺点一
必须指定短链接的长度(for循环的次数即是短链的长度)。一旦设置,如果占用满,将需要更改代码重新发布。不利于维护
2. 缺点二
会发现这个代码只是生成key,与本身要生成的链接没有任何关系,所以需要手动记录key与value的对应关系。比如记录到redis中。(其实个人并并不认为这是个缺点,短链接要考虑的一个场景就是过期)

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();
}

方法二

这个是基于方法一的改进方法,主要修复的是缺点一。
引入了一个增量变量startIndex,每次生成后对该增量变量进行累计1,使用redis来存储startIndex是个很好的解决方案。
该方法同样存在缺点2。但是优点在设置了startIndex后,该代码不需要再维护,短链接的长度会随着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;
}

你可能感兴趣的:(Java,短链接)