朋友圈是一种全新的社交方式,其中很多内容都可以被发布。以Redis作为存储引擎,下面介绍如何设计朋友圈,以利用其拥有的强大的性能优势,实现精彩且实用的数据结构方案。
要实现朋友圈,需要将用户注册到Redis中,采用“昵称->用户ID”的映射关系,可以使用Hash来存储用户注册信息,例如:HSET user nick “LEE” userId 1 代表用户昵称为“LEE”,对应的用户ID为1。
采用列表或有序集合为每个用户设计朋友圈,发布的内容以毫秒时间戳为score项,以毫秒级别的分数来保证redis中的内容在朋友圈中以“最新发布”的方式显示出来。例如,发布一条朋友圈文字内容,则可以写入到有序集合里,类似如下:ZADD friendcircle 1 1575406392707 “Hello, I am Lee”,代表用户1在1575406392707毫秒时发布朋友圈内容“Hello, I am Lee”。
第三,建立朋友关系。可以借助Redis中的集合,使用集合中存储的朋友id,来构建一个多叉树,保存一个用户的一级好友、二级、三级等多层关系,例如SADD friend:user1 2 3 4 5 代表用户1的一级好友为2,3,4,5; SADD friend:user1:2 1 6 7 8 代表用户1的一级好友2的一级好友为1,6,7,8;
此外,采用Bitmap结构可以更高效地表示用户间的关系等,每个用户都有一个Bitmap,可以表示其好友关系。例如,SETBIT friends:user 1 3 1 代表用户1的Bitmap上位3的位置为1,表明用户1和3是好友关系;GETBIT friends:user 1 3 返回1表明用户1和3是好友关系。
朋友圈的评论和点赞功能。可以使用Redis的STRING和LIST结构来存储这类内容,STRING可以用于统计点赞数量,LIST可用于评论信息的持久化存储。例如,INCR comment:1 根据给定的文章号,可以将当前文章的点赞数量计数加1;LPUSH commont:1 (userID:commentID,”This is a good article”) 将用户发表的评论写入到队列里,并持久化保存。
以上,就是利用Redis设计朋友圈的精彩且实用的数据结构方案。通过掌握Redis的数据结构,以及将合理的数据结构抽象到特定的业务场景下,用户可以快速实现高效困难的朋友圈架构。






