这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
写在开头
感觉掘金的笔记功能还挺舒服的,和本地写MarkDown几乎没有什么太大的区别
当前进度
虽然是单人进行项目开发,但是由于大部分内容在之前的掘金和直播课程中都有所学习,所以在目前进度还算可以
现阶完成的接口主要有:
基础接口
- 视频流接口
- 用户注册
- 用户登录
- 用户信息
- 视频投稿
- 发布列表
互动接口
- 赞操作
- 评论操作
- 评论列表
社交接口
- 关注操作
- 关注列表
- 粉丝列表
需求分析
由于用户的点赞和取消点赞,关注和取消关注的数据量是非常巨大的,如果每一次都去数据库调用相关函数,无疑会非常缓慢,所以我们需要使用Redis来进行加速。
Redis的主要优点
- 性能高:读写速度快,读可达11000次/s,写可达81000次/s
- 原子操作
- 数据类型齐全
Redis的安装
由于Redis的并不提供Windows版本,所以作为一个windows开发er,选在了Google教程 下载地址 github.com/MicrosoftAr… 在安装目录下启动终端窗口 常用代码如下:
redis 127.0.0.1:6379> ping //检查链接
redis-server.exe redis.windows.conf //添加环境变量
redis-server --service-install redis.windows.conf //链接到windows服务
redis-server --service-start //启动服务
redis-server --service-stop //停止服务
因为Redis的实现与缓存有关,所以在项目中也常用cache来存储相应的文件
在此考虑到本次大项目中的redis主要服务与点赞取消点赞,关注和取消关注,所以相关代码如下
// GetVideoFavor 获取点赞状态 ret: true点赞 false未点赞
func (p *ProxyIndexMap) GetVideoFavor(userid, videoid int64) bool {
key := fmt.Sprintf("favor:%d", userid)
return rdb.SIsMember(ctx, key, videoid).Val()
}
// SetVideoFavor isFavor: true点赞 false取消点赞
func (p *ProxyIndexMap) SetVideoFavor(userid, videoId int64, isFavor bool) {
key := fmt.Sprintf("favor:%d", userid)
if isFavor {
rdb.SAdd(ctx, key, videoId)
return
}
rdb.SRem(ctx, key, videoId)
}
// GetAFollowB 判断A是否关注了B
func (p *ProxyIndexMap) GetAFollowB(a, b int64) bool {
key := fmt.Sprintf("relation:%d", a)
return rdb.SIsMember(ctx, key, b).Val()
}
// SetAFollowB isFollowed:true已关注 false未关注
func (p *ProxyIndexMap) SetAFollowB(a, b int64, isFollowed bool) {
key := fmt.Sprintf("relation:%d", a)
if isFollowed {
rdb.SAdd(ctx, key, b)
}
rdb.SRem(ctx, key, b)
}
距离大项目验收已经不足十天,需要加快进度,努力开发了