关于“短”的算法(二)
生成短链接
今天介绍日常用的长链接转换短链接算法。
应用场景:
这里拿一个短链接做测试,当我们在浏览器里输入 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
关于“短”的算法(二)相关推荐
- 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)
原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...
- 【机器学习】朴素贝叶斯介绍及实例--对短信进行二分类 使用多项式分布
贝叶斯 首先什么是贝叶斯? 一个例子,现分别有 A.B 两个容器,在容器 A 里分别有 7 个红球和 3 个白球,在容器 B 里有 1 个红球和 9 个白球,现已知从这两个容器里任意抽出了一个球,且是 ...
- 从零开始学数据结构和算法(二)线性表的链式存储结构
链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...
- php单文件短链接,php实现的短网址算法分享
这篇文章主要介绍了php实现的短网址算法,理论上支持1,073,741,824个短网址,个人使用足够了,需要的朋友可以参考下 每个网址用6个字符代替,(6^32) 最多可以拥有1,073,741,82 ...
- Unicode双向算法详解(bidi算法)(二)
作者:黄邦勇帅(原名:黄勇)2019-10-17 Unicode双向算法详解(bidi算法)(二) 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文是对<C+ ...
- 票据ticket实现方式java代码_Java代码实践12306售票算法(二)
周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成 ...
- matlab算法(二维傅立叶级数变换)
说明 Y = fft2(X) 使用快速傅里叶变换算法返回矩阵的二维傅里叶变换,这等同于计算 fft(fft(X).').'.如果 X 是一个多维数组,fft2 将采用高于 2 的每个维度的二维变换.输 ...
- 数据结构和算法之五:排序算法二
数据结构基础之排序算法二 学习算法,排序算法当然是不能少的,这次我们来学习一下基础的选择排序,冒泡排序,以及大名鼎鼎的快速排序. 选择排序 选择排序,非常好理解,就是找最小的数放到第一位,然后从第二个 ...
- 短信猫二次开发(java版)
短信猫二次开发(java版) 短信猫 短信猫用于批量收/发短信或其它SIM卡服务. 短信猫与PC通过GSM无线网络交互. 交互过程可以分为三个层次: 1.物理层,即无线网络通信. 2.指令层,短信猫支 ...
最新文章
- 网页图表Highcharts实践教程之认识Highcharts
- Android学习笔记26:图片切换控件ImageSwitcher的使用
- 网工路由基础(4)EIGRP协议
- php守护进程热更新,服务器编程--守护进程
- python里元组和列表的共同点和不同点_Python元组与列表的相同点与区别
- winpythonhadoop_让python在hadoop上跑起来
- 22考研计算机专业课——数据结构【❤️考研复习指导❤️】
- 微信批量扫码进群系统
- 如何制作毕业地图分布图_最简单的数据地图制作,一共6步搞定!
- PC-红警联机问题与下载
- 电脑格式化恢复|电脑格式化数据如何恢复?
- 4pics1word android,4 Pics 1 word Answers
- 快速学习COSMIC软件规模度量方法
- iOS开发的Sketch之旅
- 线性回归 原理及公式推导
- iPhone 忘记了密码怎么办?
- 用java计算电阻,NTC热敏电阻计算公式
- 左右手坐标系与旋转正向
- 右下角弹出广告 js,漂浮效果(兼容多浏览器)
- 福州大学特大游戏制作团伙-冲刺日志(第9天11.23)