将一个long型数字转成包含0-9,A-Z,a-z共62个字符的62进制字符串。将生成的字符串和短网址服务器域名连接即为最终的短网址,如https://t.cn/FWSc3ki8mY
public class Main { public static void main(String[] args) { SnowFlake snowFlake = new SnowFlake(0, 0); for (int i = 0; i < 10; i++) { System.out.println(NumericConvertUtils.toOtherNumberSystem(snowFlake.nextId(), 62)); } } }输出结果为
FWSc3ki8mY FWSc3ki8mZ FWSc3ki8n0 FWSc3ki8n1 FWSc3ki8n2 FWSc3ki8n3 FWSc3ki8n4 FWSc3ki8n5 FWSc3ki8n6 FWSc3ki8n7 整体流程利用发号器创建短网址,保存长网址和短网址的映射关系到数据库或Redis。
短网址服务器接收到请求,根据 FWSc3ki8mY 找到原来的长网址,返回302,告诉浏览器重定向到长网址。
待优化地方现在的实现对于同一个长网址,每次创建的短网址也是不同的,如果每次创建前去数据库查询的话,效率太低,可以使用 LRU 缓存最近的N次映射结果,先查缓存,再查数据库,兼顾了空间和性能。
参考如何将一个长URL转换为一个短URL?
短 URL 系统是怎么设计的?
新浪短网址服务