热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

需求是这样的,玩过微博的大家都知道,这以下特点可以关注很多人每个人都可以发微博当我隔一段时间重新登录微博,会自动将我关注的人发的最新微博,按照时间顺序展示请问,如何用php和redis实现这样一个订阅...
需求是这样的,玩过微博的大家都知道,这以下特点

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

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

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

回复内容:

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

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

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

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

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

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

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

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

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

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

推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文介绍了如何使用call_user_func_array函数向Redis中添加有序列表或集合。该函数可以接受一个数组作为参数,第一项是要操作的有序列表或集合的键,后续的项目是排序权重和值的交替。通过该函数,可以方便地向Redis中添加多个元素,并指定它们的排序权重。 ... [详细]
author-avatar
永恆極光_822
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有