大项目日记(2)| 青训营笔记

98 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

写在开头

感觉掘金的笔记功能还挺舒服的,和本地写MarkDown几乎没有什么太大的区别

当前进度

虽然是单人进行项目开发,但是由于大部分内容在之前的掘金和直播课程中都有所学习,所以在目前进度还算可以

image.png

现阶完成的接口主要有:

基础接口

  1. 视频流接口
  2. 用户注册
  3. 用户登录
  4. 用户信息
  5. 视频投稿
  6. 发布列表

互动接口

  1. 赞操作
  2. 评论操作
  3. 评论列表

社交接口

  1. 关注操作
  2. 关注列表
  3. 粉丝列表

需求分析

由于用户的点赞和取消点赞,关注和取消关注的数据量是非常巨大的,如果每一次都去数据库调用相关函数,无疑会非常缓慢,所以我们需要使用Redis来进行加速。

Redis的主要优点

  1. 性能高:读写速度快,读可达11000次/s,写可达81000次/s
  2. 原子操作
  3. 数据类型齐全

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)
}

距离大项目验收已经不足十天,需要加快进度,努力开发了