这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。
我要实现抖音中的关注和取消关注功能,以及查看关注列表和粉丝列表。
这里我们使用Redis来对其进行实现。redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
在这个功能中,主要使用的数据类型是Set类型。具体的逻辑如下:
关注操作:
关注:使用Redis的set
douyin:user:relation:user_id里面添加to_user_id
douyin:user:follower:to_user_id里添加user_id
取消关注:
douyin:user:relation:user_id里面remove to_user_id
douyin:user:follower:to_user_id里remove user_id
关注列表:
token判断是否登录
若登录展示 Focus:user_id的成员
粉丝列表:
token判断是否登录
若登录展示Fans:user_id的成员
在进行这些操作之前,我们需要写一个redis的工具类来生成操作中需要用到的Key,点赞功能与关注功能类似。
```
```
SPLIT = ":" //分隔符
PREFIX_USER_RELATION = "douyin:user:relation" //关注
PREFIX_USER_FOLLOWER = "douyin:user:follower" //被关注(粉丝)
// GetUserRelationKey 用户关注了那些人 key:set
func GetUserRelationKey(id string) string {
return PREFIX_USER_RELATION + SPLIT + id
}
// GetUserFollowerKey 用户被那些人关注,被关注者的key,一个用户用有的粉丝 key:set
func GetUserFollowerKey(id string) string {
return PREFIX_USER_FOLLOWER + SPLIT + id
}
redis还可以用来实现点赞功能,存点赞数量点赞用户等,可以提高系统的并发性能。