Heim >Backend-Entwicklung >PHP-Tutorial >phpredis - 求思路,PHP-redis如何实现如同微博订阅服务

phpredis - 求思路,PHP-redis如何实现如同微博订阅服务

WBOY
WBOYOriginal
2016-06-06 20:44:261277Durchsuche

需求是这样的,玩过微博的大家都知道,这以下特点

  1. 可以关注很多人
  2. 每个人都可以发微博
  3. 当我隔一段时间重新登录微博,会自动将我关注的人发的最新微博,按照时间顺序展示

请问,如何用php和redis实现这样一个订阅,希望你能给个思路,或者参考资料

(求思路,不要具体答案,但希望尽量详尽)

回复内容:

需求是这样的,玩过微博的大家都知道,这以下特点

  1. 可以关注很多人
  2. 每个人都可以发微博
  3. 当我隔一段时间重新登录微博,会自动将我关注的人发的最新微博,按照时间顺序展示

请问,如何用php和redis实现这样一个订阅,希望你能给个思路,或者参考资料

(求思路,不要具体答案,但希望尽量详尽)

实际上这个是一个伟大而庞杂的系统,我说说我的思路,要想知道关注的人发了那些微博,有两种方式,一个是推,一个是拉

推的方式是每一个发微博的人都会将自己发的微博ID推送到自己的所有粉丝,显然对于范爷这样的大户,这样是会死人了

拉的方式是每个人自己主动去拉自己关注的人的所有最新的微博,如果关注的人比较多,也是不可行的

总体来说推拉是要结合的,具体怎么结合很难说,每个用户都会有自己的list,用来存储未读的微博ID,然后不断的去推拉,无论是推拉过程肯定都是背后的服务在处理,不是实时的

获取微博也不是原来想象中的SQL的select批量获取,全部是原子性的操作,比如有100条未读的微博,会循环100次从缓存中获取,或者使用redis的mutil批量获取,然后没有读到的会回源到数据库进行获取,可能会觉得这样很慢,不过实际使用过程中这样并不慢,因为使用了大量的缓存

新浪分享过好几次它们队列系统的架构,建议你找找 infoq 看看。
这里没办法详细给你总结,但大概思路它们已经分享了。
主要就是用集合和链表,加上楼上说的推拉。很复杂,真的。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn