关于“短”的算法(二)

生成短链接

今天介绍日常用的长链接转换短链接算法。

应用场景:

这里拿一个短链接做测试,当我们在浏览器里输入 https://bit.ly/2LGnewR 时:

1、首先在 DNS服务器解析域名的 IP 地址(67.199.248.10);
2、获得服务器IP地址后向服务器发送 HTTP-GET 请求,查询短码 2LGnewR;
3、此时服务器会通过短码 2LGnewR 获取对应的长链接;
4、请求通过 HTTP(301/302)转到对应的长链接响应用户。

https://www.elastic.co/guide/cn/elasticsearch/guide/2.x/bulk.html

实现原理讨论:

看了网上学者的介绍,原理可以采用发号策略完成,每次处理长地址时,发一个号即可。小型系统直接用mysql的自增索引即可,不仅保证唯一性也不会有太大服务压力。如果是请求量较大的话,可以考虑各种分布式KV系统做发号器,不停的自增。

第一个用户短链是 http://***/0,第二个是 http://***/1, 第11个就是 http://***/a,依次往后,实现了一个62进制的自增字段即可。当我们拿到kv系统给的自增的十进制的数字后,然后把数字转成62进制(数字+小写字母+大写字母)。

157284857781 => 2LGnewR

相关问题

1、长链接和短链接一对一

方案1:链接是保存db的,可以先查询,没有再插入,有就返回结果;

方案2:在方案1基础上增加一个 cache,在 kv 系统上面构建一个一定容量的长对短的 hash 表作为缓存,淘汰机制可以使用 LRU,虽不能够保证 100% 为一对一,但能减少db压力;

方案3:battle,tiff,就是不做这个需求。

2、高并发和高可用

发号器单点变多点,加几台。假设我有100个发号器,那个每个发号器的自增不再是1而是100。

3、存储

可以存在db中,也可以全部放在类似redis中,因为老东家将某个大省的一种数据全部放在redis中快上千万也没问题。主要还是看公司业务和常用的组件选择吧。

4、301还是302

301是永久重定向,好处能减少服务器压力但是缺点是无法统计链接点击数;302是临时重定向,好处是统计链接点击数,缺点是消耗服务器资源。一般会选择302,分析用户的数据比较重要。

https://gitee.com/mjTree/javaDevelop/tree/master/genShortURL

达尔文狐

    达尔文狐:体长48-60厘米,平均肩高25厘米,尾长17-26厘米,体重1.9-3.9千克,是一种体形非常小的狐狸,和家猫差不多大小。毛色暗灰色,腿部和面部有红色。腹部、喉头、胸口和耳内有白色或奶油色毛。耳壳红毛特别鲜艳。

    在1834年,查尔斯·达尔文在旅行经过奇洛埃岛时发现并命名了这种动物。 它们现生活在智利南部沿海温带森林里,杂食性的,主要食用小哺乳动物、鸟、爬行动物、两栖动物、甲虫、其他无脊椎动物和果实,也吃腐肉。

    野犬对狐狸的生存是最大的威胁,家犬也是一样,温带森林的采伐和偷猎也威胁着它们的生存。偷猎的主要原因是将小狐抓来作为宠物出售。

列入 IUCN  2016年濒危物种红色名录ver 3.1——濒危

 列入《华盛顿公约》CITES 附录Ⅱ级保护动物

https://zhuanlan.zhihu.com/p/34058827

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值