HOST="0.0.0.0"
QINIU_ACCESS_KEY="xxx"
QINIU_SECRET_KEY="xxx"
REDIS_ADDR="xxx"
REDIS_PASSWORD="xxx"
DB_ADDR="xxx"
DB_USERNAME="xxx"
DB_PASSWORD="xxx"在项目的根目录下
go mod tidy运行
go run main.gogo get github.com/gogo/protobuf/proto
go get github.com/gogo/protobuf/gogoproto
go get google.golang.org/grpc
go install google.golang.org/protobuf/cmd/protoc-gen-go
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc
go install github.com/gogo/protobuf/gogoproto然后在 proto 的文件夹下执行:
但是需要确保 github.com/gogo/protobuf/gogoproto/gogo.proto 在 GOPATH/pkg/mod 目录下
最后执行
protoc -I=. -I=$GOPATH/pkg/mod --go-grpc_out=. --gogo_out=. *.protoJWT鉴权: 基于golang-jwt包实现了 token 的颁发与解析- 使用原生
gRPC框架,proto自动生成pb.go文件。 - 用户头像、背景的随机获取:图片与视频的存储采用了
OSS云对象存储,相较于一般本地服务器,具有更加安全、持久、方便、快捷等特性,由于客户端没有设置头像的设置,这里采用的是随机生成,在用户注册后会自动得获取一组随机得头像与背景。
使用七牛云的云对象存储 kodo,先将视频上传到指定的 bucket ,上传完成后出发工作流,回调项目中的接口,从而完成视频链接的存储。
- 关注数、点赞数等计数操作使用额外字段记录,避免使用
COUNT()计数。 - 每张表都添加了
deleted_at字段用于软删除。 - 索引:
- 用户表:对(
username,deleted_at)做唯一索引; - 评论表:
vid、uid做索引; - 点赞表:
uid、vid做索引,(uid,vid,deleted_at)做唯一约束;
- 用户表:对(
缓存层,使用 Redis 的 String 的数据结构,使用 key - value,存储一个视频的点赞数量。
采取使用定时任务的方式,间隔一段时间将缓存中的数据与数据库中的数据进行同步,一定程度上解决数据一致性的问题。
该项目使用 Serverless 云函数进行部署,充分发挥云函数自动扩容、按需分配资源的优势,在保证了高并发和高可用性的同时也能够节省成本。










