这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记。
借着我们青训营的契机,笔者在其中认识了一波志同道合的伙伴。我们一起组队完成项目的开发。我们小组选的的是抖音极简版的开发。
上文说到我们抖音项目中关于使用Redis有两个有意思的点,一个是上文的视频流处理,另一个则是本文要讲的关于关注列表相关的问题。
对于查看别人的关注列表,以及别人的粉丝列表,都有一个关注按键。这说明我们在查询他人的列表的关注和粉丝列表的同时,也要和当前登录用户的关注和粉丝列表进行对比求交集。交集部分显示已关注,补集部分则是显示未关注。因此为了满足这样的特点,在Redis中我们选择使用zset对这部分信息进行存储。
每个用户的关注列表和粉丝列表都采用redis的Zset数据结构作为缓存进行存储,将关注时的时间戳作为Score,按照时间倒序返回。当查看别人的关注(粉丝)列表时,查询该用户的关注(粉丝)列表,记作S1。同时查询自己的关注列表记作S0,采用Redis的InterStore操作将两个有序结合进行求交集操作,生成一个新的存储该用户和其他用户的交集关注,同时设置一个过期时间(1分钟)。当下一次请求来就直接在redis中可以取到这个结果,若结果已过期则重新计算,这样会存在一个短期的数据不一致情况。也就是说,当缓存key未过期时,他进行关注或取关操作,则这一结果会在key过期后下一次请求才会看到。
通过这样一个结构处理,我们就能快速的给客户端提供信息。当然,我们项目使用Redis的部分还有很多,这两个地方是其中比较有意思的点。那么关于Redis在我们项目中的应用分享就写到这,下一篇我们来谈谈关于go-micro框架在我们项目中的简单流程设计。