Skip to content

这是一个高可用高性能的短链接项目,并提供了多种发号器实现

Notifications You must be signed in to change notification settings

YanLong-L/shortener

Repository files navigation

短链接项目

搭建项目的骨架

  1. 建库建表

新建发号器表

CREATE TABLE `sequence` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `stub` varchar(1) NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_uniq_stub` (`stub`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT = '序号表';

新建长链接短链接映射表:

CREATE TABLE `short_url_map` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
    `create_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `create_by` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建者',
    `is_del` tinyint UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否删除:0正常1删除',
    
    `lurl` varchar(2048) DEFAULT NULL COMMENT '长链接',
    `md5` char(32) DEFAULT NULL COMMENT '长链接MD5',
    `surl` varchar(11) DEFAULT NULL COMMENT '短链接',
    PRIMARY KEY (`id`),
    INDEX(`is_del`),
    UNIQUE(`md5`),
    UNIQUE(`surl`)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT = '长短链映射表';
  1. 搭建go-zero框架的骨架

2.1 编写api文件,使用goctl命令生成代码

/* 短链接项目
* author: q1mi
*/

type ConvertRequest {
	LongUrl string `json:"longUrl"`
}

type ConvertResponse {
	ShortUrl string `json:"shortUrl"`
}

type ShowRequest {
	ShortUrl string `json:"shortUrl"`
}

type ShowResponse {
	LongUrl string `json:"longUrl"`
}

service shortener-api {
	
	@handler ConvertHandler
	post /convert(ConvertRequest) returns(ConvertResponse)
	
    // q1mi.cn/lycsa1
	@handler ShowHandler
	get /:shortUrl(ShowRequest) returns(ShowResponse)
	
}

2.2 根据api文件生成go代码

goctl api go -api shortener.api -dir .
  1. 根据数据表生成model层代码
goctl model mysql datasource -url="root:root1234@tcp(127.0.0.1:3306)/db3" -table="short_url_map"  -dir="./model"

goctl model mysql datasource -url="root:root1234@tcp(127.0.0.1:3306)/db3" -table="sequence"  -dir="./model"
  1. 下载项目依赖
go mod tidy
  1. 运行项目
go run shortener.go

看到如下输出表示项目成功启动啦!

Starting server at 0.0.0.0:8888...
  1. 修改配置结构体和配置文件 注意:两边一定一定一定要对齐!!!

参数校验

  1. go-zero使用validator https://pkg.go.dev/github.com/go-playground/validator/v10

下载依赖:

go get github.com/go-playground/validator/v10

导入依赖:

import "github.com/go-playground/validator/v10"

在api中为结构体添加validate tag,并添加校验规则

查看短链接

缓存版

有两种方式,

  1. 使用自己实现的缓存, surl -> lurl,能够节省缓存空间,缓存数据量小
  2. 使用go-zero自带的缓存, surl -> 数据行,不需要自己实现,开发量小

这里使用第2种方案:

  1. 添加缓存配置
  • 配置文件
  • 配置config结构体
  1. 删除旧的model层代码
  • 删除 shorturlmapmodel.go
  1. 重新生成model层代码
goctl model mysql datasource -url="root:root1234@tcp(127.0.0.1:3306)/db3" -table="short_url_map"  -dir="./model" -c
  1. 修改svccontext层代码

About

这是一个高可用高性能的短链接项目,并提供了多种发号器实现

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages