伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

基于Redis实现PHP消息队列

来源:本站原创 浏览:145次 时间:2021-10-09

所谓消息队列,即在消息的传输过程中保存消息的容器。最����,��ֹ常见的使用场景是,通过引入消息队列来对耗时的任务就行异步处理,以及应对高并发问题,即所谓的削峰作用。在以PHP为主要开发语言的项目中,我们可以选择的软件有很多,最常使用的有三种:基于 Redis 的 List数据类型 来用PHP实现入列出列,基于 Memcached 的扩展应用 MemcacheQ,还有更强大和流行的RabbitMQ

基于 Redis 来实现消息队列,主要是用到 Redis 中的 List 数据类型。下面分别介绍下 Redis 的 List 列表的使用 以及 基于 Redis 的PHP轻量级消息队列 php-resque

phpredis 扩展: https://github.com/phpredis/phpredis

1. Redis 的 List 列表的使用
<?php/** * 基于Redis-List实现的简单消息队列 * @author <mail@phpha.com> *///实例化$redis = new Redis();//连接服务端$redis->connect('127.0.0.1', 6379);//入列$redis->lPush('TestQueue', 'phpha.com');$redis->lPush('TestQueue', 'www.phpha.com');$redis->lPush('TestQueue', 'blog.phpha.com');//出列for($i = 1; $i <= 4; $i++){    //输出队列内信息    $result = $redis->rPop('TestQueue');    var_dump($result);}

输出如下:

string(9) "phpha.com"string(13) "www.phpha.com"string(14) "blog.phpha.com"bool(false)

说明:以上按照先进先出的原则,分别出列了所有的数据。如果列表内数据为空,则 Redis::rPop() 返回 false

2. 基于 Redis 的PHP轻量级消息队列 php-resque

项目地址:https://github.com/chrisboulton/php-resque

2.1 php-resque 中的 3 种角色
  1. Job :一个 Job 就是一个需要再队列中执行的任务,比如发送短信邮件等
  2. Queue :也就是消息队列,基于 Redis 实现
  3. Worker :负责从消息队列中取出任务并执行,以守护进行方式在后台运行
2.2 php-resque 任务执行流程
  1. 创建 Job :在PHP中是独立的 Class (包含所有的业务逻辑处理)
  2. 加入 Queue :将 Job 对应的 Class 以及实例化所需的参数一起放入队列中
  3. 创建 Worker :创建后台守护进程来定时检查队列中的任务并执行

说明:在 php-resque 中,还有一个很重要的设计:一个 Worker,可以处理一个队列,也可以处理很多个队列,并且可以通过增加 Worker 的进程/线程数来加快队列的执行速度。


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net