Go上手笔记(六) 抖音拓展接口与Redis高性能储存| 青训营笔记

278 阅读3分钟

这是我参与「第三届青训营-后端场」笔记创作活动的的第6篇笔记,如有错误还请指正。   【有船启航】

一、需求分析

抖音项目的拓展接口有两个,一个是点赞/评论相关,一个是关注/粉丝相关。不难看出,对于抖音视频,这两个功能的访问频率都是极高的,修改十分频繁。如果是采用关系型数据库,每次使用硬盘存储,性能就比较低了。那么,在实现拓展接口时,我则考虑使用NoSQL数据库。

二、Redis,一站式高性能存储方案

Redis是一款基于键值对的NoSQL数据库,它的值支持多种数据结构:

  • 字符串(strings)
  • 哈希(hashes)
  • 列表(lists)
  • 集合(sets)
  • 有序集合(sorted sets)等。 Redis将所有的数据都存放在内存中,所以它的读写性能十分惊人。 同时,Redis还可以将内存中的数据以快照或日志的形式保存到硬盘上,以保证数据的安全性Redis典型的应用场景包括:缓存、排行榜、计数器、社交网络、消息队列等。这也就是两个拓展接口十分适合使用Redis来实现。

Redis安装

安装教程网上已经有很多人做的很详尽了,这里也就不过多赘述。

三、功能实现

功能实现部分我以拓展接口2(关注相关功能)为例,功能有三,关注/取关、关注列表、粉丝列表。其中,关注/取关只是返回操作的响应,而关注列表、粉丝列表需要返回用户信息列表,考虑到这一点,redis的键值对就更加让人看得顺眼了。因为用户的不可重复性,所用数据类型选用set和Zset比较合适,将用户作为key,其关注对象/粉丝作为value存入。其中,Zset还可以用score存其他数据,例如关注时间或其他数据。

此处,仅以set开展简化思路:

  1. 首先让GO整合redis,我使用的是官方推荐的redigo包。在config包中添加redis配置参数。

  2. 在dao包中添加初始化函数,用来初始化redis连接池,并暴露一个取连接的函数。

  3. 显然,如果只存一对关注关系,那么找粉丝列表的时候会十分麻烦,所以,当用户操作关注时,储存用户(key)-关注对象(value)的关注数据对和关注对象(key)-关注对象的粉丝(value)粉丝数据对,更为合适。所以在dao包中写四个函数:

    • AddFollowee():增加关注对象
    • AddFollower():增加关注对象的粉丝
    • RemFollowee():删除关注对象
    • RemFollower():删除对象的粉丝
  4. 在service包中,添加业务逻辑并处理错误和返回值,即

  • 新增关注/取关业务:① 本用户的关注为其关注对象 ②关注对象的粉丝为本用户。
  • 查询关注/粉丝列表
  • 查询关注数/粉丝数、是否关注、处理错误等函数。
  1. 在controller层完成用户操作以及token鉴权等。