一、开源项目简介
一个适合中小型社区网站使用的短链接服务系统,支持短链接成产、查询及302转向,并顺带简单的点击量统计
二、开源协议
使用MulanPSL-2.0开源协议
三、界面展示
四、功能概述
一个适合中小型社区网站使用的短域名服务系统,支持短域名成产、查询及302转向,并顺带简单的点击量统计。
五、技术选型
Give Thanks To
由衷感谢以下开源软件、框架等(包括但不限于)
- gin-gonic/gin
- FomanticUI
- dchest/captcha
- Masterminds/sprig
- go–redis/redis
- jmoiron/sqlx
- go-ini/ini
配置文件说明
项目根目录下的 config.ini 中存放着关于 ohUrlshortener 短链接系统的一些必要配置,请在启动应用之前确保这些配置的正确性
[app]
应用是否以 debug 模式启动,主要作用会在go-gin 框架上体现(eg:日志输出等)
debug = false
短链接系统本地启动端口
port = 9091
短链接系统管理后台本地启动端口
admin_port = 9092
短链接系统的完整 url 前缀,eg:https://t.cn/ 是前缀(不要忘记最后一个/符号)
url_prefix = http://localhost:9091/
短链接在应用启动时会存入 Redis 中
所有短链接再系统启动时会以 Key(short_url) -> Value(original_url) 的形式存储在 Redis 中。理论上说:
1. 为什么要这么做?
当短链接的查询请求进入应用时,为了能够更快、更准确的将用户请求转向到目标链接,与传统的方式从数据库中查询相比,直接从 Redis 中获取目标链接就会显得更有价值。
2. 这种处理方式有什么缺点?
理论上来说,如果 Redis 所在的服务器的内存较大的话,存储10w个Key也是可以的。但是,硬件条件不允许的情况下,就需要控制 Redis 中的 Key 数量(主要是怕机器扛不住,Redis 本身的性能不会有问题)。这部分的功能扩展,将会再将来的某个版本中考虑实现。
3. 万一 ……
考虑到可扩展性,多封装了一层 service,以便需要的时候在业务逻辑层进行自定义扩展,eg:将 key 查询改成数据库查询等。
短链接生产过程相关代码
所在文件 core/short_url.go
func GenerateShortLink(initialLink string) (string, error) {
if utils.EemptyString(initialLink) {
return "", fmt.Errorf("empty string")
}
urlHash, err := utils.Sha256Of(initialLink)
if err != nil {
return "", err
}
number := new(big.Int).Setbytes(urlHash).Uint64()
str := utils.Base58Encode([]byte(fmt.Sprintf("%d", number)))
return str[:8], nil
}
定时器1分钟清理一次访问日志
所在文件 main.go
const ACCESS_LOG_CLEAN_INTERVAL = 1 * time.Minute
func startTicker() error {
ticker := time.NewTicker(ACCESS_LOG_CLEAN_INTERVAL)
for range ticker.C {
log.Println("[StoreAccessLog] Start.")
if err := service.StoreAccessLogs(); err != nil {
log.Printf("Error while trying to store access_log %s", err)
}
log.Println("[StoreAccessLog] Finish.")
}
return nil
}
六、源码地址
私信回复:短链接服务系统
或访问一飞开源:https://code.exmay.com/
本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 cloud@ksuyun.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.daxuejiayuan.com/2865.html
如若转载,请注明出处:https://www.daxuejiayuan.com/2865.html