首页 > 网站“关注”功能如何实现?

网站“关注”功能如何实现?

比如知乎、等网站的关注功能,点击关注按钮后,有关这个问题的后续答案会通知给你,当你下次打开页面的时候,会有数字提示你关注的内人有更新,这个功能是如何实现的呢?


这个是数据库方面的设计,比如问题表(question)中的字段有:id(编号), title(问题名称), content(问题内容), tips(关键词), follower(关注者)等等。follower字段中的数据存储,可以是各种的格式,只要把每个用户的userid隔开就行,比如这样存储: 1,3,5,8,12,表示userid为1, 3, 5, 8, 12的用户有在关注这个问题,若用户取消关注时,再把这个userid去掉;好像这样存储不是很好删哈,那换成这样存储呢:[1, 2, 3, 4],把数据当做一个数组进行存储。

还有回答列表(answer),这个列表中的外键是问题表中的id。

还有用户表(user),每个用户有一个notice的字段,这个字段可以是个int类型的,默认是0,当有一个通知时就+1。

当问题的描述发生了更新,或者有人回答了这个问题,那么查询问题表(question)的follower字段中所有的用户id,查出后,再按照用户id更新用户表(user)中的notice字段。下次当用户登录时,就查询这个notice字段是否为0,若为0表示没有通知,否则就显示通知的个数。

当然,实际中的数据库设计肯定更加的复杂,我这儿只是简单的说下原理而已。


首先,可以了解下关系型数据库。


问题表里面设一个关注人的字段,里面可以用json_encode或者serialize保存关注人的用户ID。有人回答了该问题,程序就读取关注人字段,根据每一个用户ID插入一条消息通知记录到消息表,这样就能通过查询消息表提醒关注用户问题有更新。不过这样做的话,如果关注的人很多,一旦问题有更新,那么要插入消息表的记录就很多,不知道还有什么更好的实现方法。


问题表,用户表,问题用户关系表 关联一下就是了


这个问题太大,但有一点可以告诉你,你看到的信息都是冗余后的非一致性信息。换句话说,这些信息是源信息的副本。

【热门文章】
【热门文章】