PHP 实现 Redis消息队列 demo

 PHP 实现 Redis消息队列 demo代码:
 
所谓消息队列,即在消息的传输过程中保存消息的容器。最常见的使用场景是,通过引入消息队列来对耗时的任务就行异步处理,以及应对高并发问题,即所谓的削峰作用。在以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实现的简单消息队列
*/

//实例化
$redis = new Redis();
//连接服务端
$redis->connect('127.0.0.1', 6379);
//入列
$redis->lPush('TestQueue', '51ask');
$redis->lPush('TestQueue', 'www.51ask.org');
//出列
//取出前2个
for($i = 1; $i <= 3; $i++){
//输出队列内信息
$result = $redis->rPop('TestQueue');
var_dump($result);
}

输出如下:
 
string(9) "51ask"
string(13) "www.51ask.org"
bool(false)

说明:以上按照先进先出的原则,分别出列了所有的数据。如果列表内数据为空,则 Redis::rPop() 返回 false。
 
2. 基于 Redis 的PHP轻量级消息队列 php-resque

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

2.1 php-resque 中的 3 种角色

Job :一个 Job 就是一个需要再队列中执行的任务,比如发送短信邮件等

Queue :也就是消息队列,基于 Redis 实现

Worker :负责从消息队列中取出任务并执行,以守护进行方式在后台运行

2.2 php-resque 任务执行流程

创建 Job :在PHP中是独立的 Class (包含所有的业务逻辑处理)

加入 Queue :将 Job 对应的 Class 以及实例化所需的参数一起放入队列中

创建 Worker :创建后台守护进程来定时检查队列中的任务并执行

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

0 个评论

要回复文章请先登录注册