Skip to content

基于 GO 实现的轻量级短网址系统,支持域名缩短,查看访问量,后台管理等功能。

License

Notifications You must be signed in to change notification settings

xingly-cn/ShortUrl-Go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ShortUrl-Go(后端)

基于 GO 实现的轻量级短网址系统,支持域名缩短,支持查看访问量,后台管理等功能。

长链接生成短链接,访问短链接 302 重定向至原始长链接,并记录访问次数。

ShortUrl 前端模板

若您有宝贵的意见或建议,欢迎提交 Pr。

技术栈

依赖 说明
Gin 高性能 Web 框架
Go-Redis NoSQL 缓存
Gorm ORM 框架
MurmurHash,Base62 Hash 算法

相关依赖,陆续添加中......

实现

  • URL 生成模块

判断网址是否合法,若合法使用 MurmurHash 算法将原始长链接 hash 为 32 位散列值,再将散列值转为 62 进制字符串,即为短链接。

将短链接存入 Redis 添加指定过期时间(3天)的缓存,并插入数据库。

  • URL 访问模块

当请求时,先判断 Redis 中有无缓存,若有则直接 302 重定向,并更新访问量,重新设置短链接过期时间。若无则查询数据库,数据库也没有则返回错误。

若数据库中存在,则直接重定向,设置短链接过期时间,更新访问量。

技术选型

MurmurHash:长链转短链自然需要一个哈希算法,MurmurHash 就是一种非加密型哈希算法,与 MD5、SHA 等常见哈希函数相比,性能与随机分布特征都要更佳。

MurmurHash 有 32 bit、64 bit、128 bit 的实现,64 bit 已经足够表示近 56 亿个短链接。

base62:MurmurHash 生成的哈希值最长有 20 位十进制数,为了进一步缩短短链接长度,可以将哈希值转为 62 进制,最长为 12 个字符。

Redis:生成短链接后,通常在后续一段时间内此短链接的使用频率较高,则向 Redis 中添加带过期时间的缓存来减轻数据库压力。

302 状态码:通常需要记录短链访问次数或需要删除短链接时,使用 302 临时重定向来处理,和服务器压力相比,数据的价值往往更大。

About

基于 GO 实现的轻量级短网址系统,支持域名缩短,查看访问量,后台管理等功能。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages