ShortLink
高性能短链接服务

专为游戏发行与数字营销而生的高性能短链接服务 — Redis 缓存加速、Snowflake 分布式 ID、异步统计、可视化管理后台

cngamesdk/shortlink License: MIT 2026-06-26
GitHub 仓库 快速开始

项目背景

为什么你需要一个短链接服务

游戏发行推广的痛点

在游戏发行领域,推广链接往往承载了大量的追踪参数——渠道标识、广告计划ID、创意素材编号、回调地址等。一条完整的推广链接动辄超过200个字符:

https://game.example.com/download?channel=toutiao&ad_id=78291034&creative=video_001&callback=https%3A%2F%2Ftrack.example.com%2Fcallback%3Fid%3Dabc123%26type%3Dinstall&deep_link=game://open

这样的长链接带来的问题是显而易见的:

短信推广受限

单条短信仅70字,一条链接就占去大半空间,推广内容被严重压缩

社交平台截断

微信、QQ等平台对长链接展示不友好,用户看到乱码般的URL缺乏点击意愿

二维码复杂

链接越长二维码越密集,低端设备扫码识别率下降

数据分析困难

无法直观统计每条推广链接的真实点击效果

现有方案的不足

市面上的短链接服务主要分为两类:

ShortLink 正是为解决上述问题而生。 它脱胎于真实的游戏发行业务场景,经过多个项目验证,现在作为开源项目提供给整个行业使用。无论你是游戏公司、电商平台还是内容创作者,只要你有推广链接管理的需求,ShortLink 都能帮助你。

50,000+
单机 QPS
< 5ms
P99 延迟
99%+
缓存命中率
< 20MB
Docker 镜像体积

核心优势

为高并发场景而生的企业级短链接方案

极致性能:毫秒级跳转

ShortLink 采用 Redis 缓存 + MySQL 持久化 的双层存储架构。每次 302 跳转请求优先查询 Redis,命中率超过 99%,平均响应时间在 1-3 毫秒。即使缓存未命中,MySQL 查询走唯一索引,回源耗时也控制在 5 毫秒以内,同时自动回写缓存。

分布式短码生成:天然唯一

短码生成采用 雪花算法(Snowflake)+ Base62 编码 方案。相比 MD5 截取方案,完全无哈希冲突风险;相比自增 ID 方案,不暴露业务数据量,且天然支持分布式多节点部署。

每个节点通过配置不同的 machine-id(0-1023),即可独立生成唯一短码,无需分布式锁或中心化 ID 服务,部署扩展极为简单。

完整的数据统计

推广不只是生成链接,更重要的是效果追踪。ShortLink 内置完整的点击统计:

访问 IP

识别真实用户分布

User-Agent

区分设备类型和操作系统

Referer

追踪流量来源

时间戳

分析访问时段规律

总点击数

实时展示每条短链接效果

所有统计数据通过异步通道写入,采用 buffered channel(容量 10,000)+ 定时批量插入,单条跳转请求不产生任何同步写操作。

可视化管理后台

提供完整的 Web 管理后台,基于 Vue3 + Element Plus 构建:

生产级工程质量

私有化部署,数据安全

与第三方 SaaS 不同,ShortLink 支持完全私有化部署。你的推广数据、用户访问行为全部存储在自己的服务器上,不经过任何第三方,完全符合数据安全合规要求。对于游戏公司而言,推广数据就是核心商业机密,私有化是刚需。

系统架构

经典分层架构,Redis + MySQL 双层存储

整体架构

ShortLink 采用经典的分层架构,Go + Gin 提供 API 服务,Redis 作为缓存层,MySQL 作为持久层:

Client / 浏览器
ShortLink API
Go + Gin
Redis Cache
MySQL (GORM)
存储层
管理后台 (Vue3 + Element Plus)
管理端

核心流程:302 跳转

  1. 1 客户端发起 GET /aB3xKm 请求
  2. 2 Trace 中间件生成唯一 request_id,写入 Context
  3. 3 请求日志中间件记录入站信息
  4. 4 查询 Redis 缓存(key: sl:aB3xKm
  5. 5 缓存命中 → 直接返回 302 跳转
  6. 6 缓存未命中 → 查询 MySQL(唯一索引)→ 回写 Redis
  7. 7 检查过期时间,已过期返回 404
  8. 8 异步写入点击日志(push 到 buffered channel)
  9. 9 异步递增 Redis 计数器(INCR 命令)
  10. 10 返回 302 Location 响应

异步点击统计

点击统计是短链接服务的核心需求,但绝不能阻塞跳转请求。ShortLink 的统计设计:

短码生成算法

ShortLink 的短码生成由两部分组成:

技术栈

现代、精简、生产就绪的技术选型

语言
Go 1.24+
Web 框架
Gin
ORM
GORM
缓存
Redis (go-redis/v9)
日志
Zap + Lumberjack
配置
Viper (YAML)
ID 生成
Snowflake + Base62
管理后台
Vue3 + Element Plus
容器化
Docker (Alpine)

快速接入指南

一分钟启动,三分钟接入

一分钟启动

克隆项目

git clone https://github.com/cngamesdk/shortlink.git
cd shortlink

修改配置

cp config.yaml config.local.yaml
vi config.local.yaml

填入 MySQL 和 Redis 连接信息

启动服务

go run main.go -c config.local.yaml

服务启动后自动建表

Docker 部署

# 构建镜像
make docker

# 运行容器
docker run -d \
-p 8090:8090 \
-v ./config.local.yaml:/app/config.yaml \
shortlink:dev

创建第一条短链接

curl -X POST http://localhost:8090/api/shortlink/create \
-H "Content-Type: application/json" \
-d '{
"original_url": "https://game.example.com/download?channel=toutiao",
"title": "头条渠道推广",
"expire_days": 30
}'

响应示例:

{
"code": 1,
"msg": "success",
"data": {
"short_code": "aB3xKm",
"short_url": "https://s.example.com/aB3xKm"
}
}

管理后台集成

如果你使用 gin-vue-admin 作为管理后台框架,ShortLink 提供了开箱即用的模块集成方案。只需将 background 目录下的模块文件复制到你的项目中,重启服务即可自动完成:

让每一条推广链接,都简洁有力

ShortLink 采用 MIT 协议开源,代码完全免费,可用于商业项目。无论是个人开发者还是企业团队,都可以无顾虑地接入。

GitHub 仓库 提交 Issue 返回首页