设计要点

  1. 唯一对应
  2. 持久化
  3. 高性能
  4. 高可用

设计分析

唯一对应:一般通过6位的数字+大小写字母来组成,这样可以有62^6个配额,短链接的取值可能一样,但是服务器部署域名一定不一样,所以请求到服务器获取的映射关系也不一样。http://t.cn/RtFFvic中,有可能A、B两家公司分配的映射key值都是RtFFvic,但是A公司a.cn,B公司是b.cn,所以不会造成冲突。
持久化:mysql
高性能:缓存+分布式
高可用:集群+多机房部署

设计

  1. class ShortLinkGenerator{
  2. private AtomicInteger currentId = new AtomicInteger(0);
  3. private ConrrentHashMap<Integer, String> map = new ConrrentHashMap();
  4. public void addLink(String link){
  5. map.put(currentId.getAndIncrement(), link);
  6. }
  7. public void getLink(String link){
  8. map.put(currentId.getAndIncrement(), link);
  9. }
  10. }

处理流程