当前位置:网站首页>短链的设计
短链的设计
2022-07-06 15:51:00 【OoZzzy】
目前在很多场景下,都需要短链,尤其是涉及到一些 URL 下发的逻辑。之前做小马 AI 课的业务时,销售通过短信下发的链接就是一个短链。为什么需要短链呢?考虑到一个 URL 上有 path、query 等参数,各种参数拼接在一起就成了一个长的字符串。
1.短链组成
协议 + 域名 + path
,协议可以直接忽略。域名是必须的(废话),并且足够短,否则的话就变成了长的短链(挺傻的)。最后 path 的部分才是关键,看起来是一个由 6 个字符组成的字符串,并且字符的范围是大小写字母+数字。
2.Path 的生成
2.1 哈希算法
Path 的其中一种方式就是通过哈希算法计算得到。常见的哈希函数有 MD5、SHA1 等大家常见的加密型哈希算法,也有 HighwayHash、MurmurHash 等非加密型哈希函数。以 MurmurHash 为例,目前已经迭代到 MurmurHash 3,能够产生 32bit 和 128 bit 的哈希值,并且对于规律性较强的 key,随机分布的特征表现的很不错。
不过哈希冲突是不可控的,我们虽然有 N 种解决哈希冲突的方式,但是会增加整个系统的整体复杂度。
2.2 自增 ID
也可以维护一个 ID 自增生成器,对于每一个长链生成1、2、3等自增的序号,然后把长链和序号的映射保存在数据库里面,然后得到如 https://fake.short/1、https://fake.short/2 等短链。考虑到单机容易造成单点故障,所以一般都是分布式的 ID 生成器。
- Mysql
- SnowFlake
- UidGenerator 百度
- Leaf 美团
2.3 进一步缩短
如果我们得到『1536389934』这个序号的话,看起来还是有点长,如果想进一步缩短,可以把十进制数转换成62进制数。然后就得到一个比原序号更短的 ID 了。
为什么要用62进制转换?
62进制转换是因为62进制转换后只含数字+小写+大写字母。而64进制转换会含有/,+这样的符号(不符合正常URL的字符)encodeURIComponent(‘+’) => %xx
10进制转62进制可以缩短字符,如果我们要6位字符的话,已经有560亿个组合了。
边栏推荐
- A few suggestions for making rust library more beautiful! Have you learned?
- 前置机是什么意思?主要作用是什么?与堡垒机有什么区别?
- How to choose the server system
- Dayu200 experience officer homepage AITO video & Canvas drawing dashboard (ETS)
- Hard core observation 545 50 years ago, Apollo 15 made a feather landing experiment on the moon
- Devsecops software R & D security practice - release
- Precise drag and drop within a contentable
- Computer reinstallation system teaching, one click fool operation, 80% of people have learned
- What does front-end processor mean? What is the main function? What is the difference with fortress machine?
- 安全保护能力是什么意思?等保不同级别保护能力分别是怎样?
猜你喜欢
Wu Enda 2022 machine learning course evaluation is coming!
How much does the mlperf list weigh when AI is named?
Talking about the current malpractice and future development
#DAYU200体验官# 在DAYU200运行基于ArkUI-eTS的智能晾晒系统页面
Efficient ETL Testing
Use mitmproxy to cache 360 degree panoramic web pages offline
Stop saying that microservices can solve all problems
Dayu200 experience officer runs the intelligent drying system page based on arkui ETS on dayu200
室内LED显示屏应该怎么选择?这5点注意事项必须考虑在内
The worse the AI performance, the higher the bonus? Doctor of New York University offered a reward for the task of making the big model perform poorly
随机推荐
Koa2 addition, deletion, modification and query of JSON array
Stop saying that microservices can solve all problems
Children's pajamas (Australia) as/nzs 1249:2014 handling process
【全网首发】Redis系列3:高可用之主从架构的
Automatically update selenium driver chromedriver
Restoration analysis of protobuf protocol of bullet screen in station B
浅谈现在的弊端与未来的发展
Precise drag and drop within a contentable
Efficient ETL Testing
借助这个宝藏神器,我成为全栈了
Coscon'22 community convening order is coming! Open the world, invite all communities to embrace open source and open a new world~
Leetcode problem solving - 889 Construct binary tree according to preorder and postorder traversal
机器人材料整理中的套-假-大-空话
这个『根据 op 值判断操作类型来自己组装 sql』是指在哪里实现?是指单纯用 Flink Tabl
儿童睡衣(澳大利亚)AS/NZS 1249:2014办理流程
Thinkphp5 multi table associative query method join queries two database tables, and the query results are spliced and returned
食品里的添加剂品种越多,越不安全吗?
How does crmeb mall system help marketing?
不要再说微服务可以解决一切问题了
MySQL implementation of field segmentation from one line to multiple lines of example code