场景

短链接服务就是将一段长的URL转换为短的URL,比如利用新浪微博的短链接生成器,可将一段长的URL(http://blog.csdn.net/poem_qianmo/article/details/52344732)转换为一段短的URL(http://t.cn/RtFFvic),用户通过访问短链接即可重定向到原始的URL。

整个交互流程如下:

设计要点

短链接生成算法

(1)利用放号器,初始值为0,对于每一个短链接生成请求,都递增放号器的值,再将此值转换为62进制(a-zA-Z0-9),比如第一次请求时放号器的值为0,对应62进制为a,第二次请求时放号器的值为1,对应62进制为b,第10001次请求时放号器的值为10000,对应62进制为sBc。

(2)将短链接服务器域名与放号器的62进制值进行字符串连接,即为短链接的URL,比如:t.cn/sBc。

重定向过程

生成短链接之后,需要存储短链接到长链接的映射关系,即sBc -> URL,浏览器访问短链接服务器时,根据URL Path取到原始的链接,然后进行302重定向。映射关系可使用K-V存储,比如Redis或Memcache。

优化方案

算法优化

采用以上算法,对于同一个原始URL,每次生成的短链接是不同的,这样就会浪费存储空间,因为需要存储多个短链接到同一个URL的映射,如果能将相同的URL映射成同一个短链接,这样就可以节省存储空间了。

(1)方案1:查表

每次生成短链接时,先在映射表中查找是否已有原始URL的映射关系,如果有,则直接返回结果。很明显,这种方式效率很低。

(2)方案2:使用LRU本地缓存,空间换时间

使用固定大小的LRU缓存,存储最近N次的映射结果,这样,如果某一个链接生成的非常频繁,则可以在LRU缓存中找到结果直接返回,这是存储空间和性能方面的折中。

可伸缩和高可用

如果将短链接生成服务单机部署,缺点一是性能不足,不足以承受海量的并发访问,二是成为系统单点,如果这台机器宕机则整套服务不可 用,为了解决这个问题,可以将系统集群化,进行“分片”。

在以上描述的系统架构中,如果发号器用Redis实现,则Redis是系统的瓶颈与单点,因此,利用数据库分片的设计思想,可部署多个发号器实例,每个实例负责特定号段的发号,比如部署10台Redis,每台分别负责号段尾号为0-9的发号,注意此时发号器的步长则应该设置为10(实例个数)。

另外,也可将长链接与短链接映射关系的存储进行分片,由于没有一个中心化的存储位置,因此需要开发额外的服务,用于查找短链接对应的原始链接的存储节点,这样才能去正确的节点上找到映射关系。

ref:

短链接服务架构设计与实现

https://blog.csdn.net/lz0426001/article/details/52370177

URL短网址生成算法原理

https://blog.csdn.net/ithomer/article/details/81436493

Yourls开源短链接(短网址)程序源码的各种使用方法

https://blog.csdn.net/qq_40134903/article/details/81022758

官方网站:http://yourls.org

https://www.cnblogs.com/bluestorm/category/344568.html

长链接转化成短链接java,长链接转短链接(短网址)相关推荐

  1. Java把长链接变成短链接_借助第三方,java长链接转短链接,IP域名同样支持

    短信和微博中用到短链接,短链接的主要职责就是把原始链接很长的地址压缩成短链接地址,当点击这个链接后,又可以跳转到原始链接地址. package common.util; import java.uti ...

  2. python:微信支付链接转化成图片(data格式、PNG格式)

    微信支付的链接基本格式如下: weixin://wxpay/bizpayurl?pr=szIyqLmzz 拿到链接后,需要把它转成图片二维码,用来手机可扫描. import base64import ...

  3. IOS-将长文字转化成图片方法

    我们在看微博时,会看到一些长图片上的显示文章,现在就介绍下如何实现.分析下还是很简单的,总结如下:1.计算文字区域的高 2.利用UIGraphics图形上下文方法来实现 3.验证方法:UIImageW ...

  4. 长链接转成短链接的原理和实现详解

    一.为什么要设计短链接,短链接有什么好处? 1.链接变短,在对内容长度有限制的平台发文,可编辑的文字就变多了. 比如:微博,限定了只能发 140 个字,如果一串长链直接怼上去,其他可编辑的内容就所剩无 ...

  5. 怎么把淘宝长链接转换成可以在新浪微博,微信发布的短链接?

    分享淘宝商品宝贝的淘客都知道,商品的详情页链接太长在微博,微信发布的话太占用字符空间了,而且过长的链接很不正规用户难以接受.所以我们需要将这些长链接转换缩短成一个非常短的短链接再发布.所有短链接服务商 ...

  6. php将长url转成短链接,php将URL长链接转换短链接的两种方法

    短网址(Short URL) ,顾名思义就是在形式上比较短的网址.在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更 ...

  7. 实用工具网站(经纬度、短链接、图片格式转换、长微博、图片压缩、uuid、繁体字、md5破解)

    一些实用的在线编辑器 在线生成 uuid:UUID Online md5/sha的在线破解:md5在线解密破解,md5解密加密 0. 时间与日期类网站 timeanddate.com 1. 经纬度查询 ...

  8. tcp协议中的长连接和短连接服务器,谈谈HTTP协议中的短轮询、长轮询、长连接和短链接...

    undefined 在之前总结 WebSocket 的时候就已经提到过短长轮询了~~今天看公众号文章,又把长短连接引进来一起分析.感觉这种总结很棒,那么我们一起看看呗 长短连接 听说长短连接的话,应该 ...

  9. java 新浪短链接_java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java | 学步园...

    仿新浪微博 短链接地址生成工具 ShortUrlGenerator.java String sLongUrl = "http://www.zuidaima.com/share/1550463 ...

  10. java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java

    原文:仿新浪微博 短链接地址生成工具 ShortUrlGenerator.java 源代码下载地址:http://www.zuidaima.com/share/1550463378934784.htm ...

最新文章

  1. C ++基本输入/输出
  2. 新手vue构建单页面应用实例
  3. Qt for Android获取手机热点开关状态
  4. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
  5. char强制类型转换为int_C语言学习第5篇---类型转换概念理解
  6. 基于图查询系统的图计算引擎
  7. 逐步实现智慧人居,AIoT 是如何做到的?
  8. cvsaveimage 异常_C++ IplImage*的若干bug之三:cvSaveImage問題
  9. Cmd下开启3389
  10. GDAL源码剖析(十)之编写自己的扩展格式
  11. anki模板_【授权转载】【Anki高级操作技巧】(19)-如何在模板上添加新字段
  12. django 学习个人总结 之many_to_one
  13. 如何利用手机的OCR文字识别功能制作扫描件?
  14. win7计算机出现空白图标,Win7系统桌面图标显示异常变未知白色图标解决方法大全...
  15. Ajax的常用技巧(4)---实现数据库分页
  16. 伪标签Web2.0?
  17. vuex vue-router
  18. 旺旺消息上传到服务器,旺旺在线却发送不了消息怎么办
  19. mongodb 地理距离_MongoDB地理空间移动演示
  20. 爬虫小试-0217影响因子表

热门文章

  1. 宏碁台式计算机u盘启动,Acer宏碁台式电脑怎么通过bios设置u盘启动
  2. JAVA重写和重载的区别
  3. 家里电脑怎么控制公司电脑?电脑远程控制的几种方式
  4. 数据模型 同比 环比_同比和环比计算公式?
  5. pkg将项目打包成 exe应用, 双击启动 node
  6. Latex 给参考文献添加doi号和超链接
  7. c语言200以内能被3和5整除的数,程式设计程式 求500以内能被3和5同时整除的所有数的和,c语言程式码写全一点,谢谢啦...
  8. leetcode 1336解题思路
  9. vbm 分析_MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)...
  10. RTKLIB源码调试.trace文件解析.stat文件解析