写点什么

短链接生成算法

用户头像
Skysper
关注
发布于: 2021 年 06 月 16 日

提供一个短 url 生成算法:

1、借助于 hash 算法生成 hash code

2、将 hash code 值转换为短链接字符串

算法实现

package com.skysper.component;
import com.google.common.hash.HashCode;import com.google.common.hash.Hashing;
import java.nio.charset.Charset;
/** * 短网址 */public class ShortUrl {
private ShortUrl() { }
//存在hash碰撞的情况 private static int getHashCode(String code) { HashCode result = Hashing.murmur3_32().hashString(code, Charset.forName("UTF-8")); // 移除负数情况 return result.asInt() & 0x7fffffff; }
private static final String CHARS = "0123456789abcdefghijqlmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXWZ"; private static final char[] ARRAY = CHARS.toCharArray(); private static final int CHARS_LENGTH = 62;
/** * 针对返回的hash code进行62进制转化 * @param url * @return */ public static String hash(String url) { int code = getHashCode(url); StringBuilder stringBuilder = new StringBuilder(); while(code > 0) { int index = code % CHARS_LENGTH; code = code / CHARS_LENGTH; stringBuilder.insert(0,ARRAY[index]); } return stringBuilder.toString(); }
}
复制代码

幂等支持

对于同一个 url 生成 hash 相同,此时根据得到的短链接获取原始链接,如果一致,则返回当前的短链接,否则认定为 hash 冲突,执行 hash 冲突的处理逻辑


hash 冲突

1、提供多个 hash 算法,冲突时依次选择新的算法生成

2、对于结果短链接进行二次 hash


发布于: 2021 年 06 月 16 日阅读数: 19
用户头像

Skysper

关注

人生不在于谁更优秀,而在于谁更坚持 2016.03.29 加入

还未添加个人简介

评论

发布
暂无评论
短链接生成算法