您的位置:首页 > 数据库 > Redis

基于Redis实现PHP消息队列

2021-04-26 23:27 1056 查看

所谓消息队列,即在消息的传输过程中保存消息的容器。最常见的使用场景是,通过引入消息队列来对耗时的任务就行异步处理,以及应对高并发问题,即所谓的削峰作用。在以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
 的进程/线程数来加快队列的执行速度。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: