<?php
/**
* 基本redis手消息队列
* 用法:
* use Com\Queue;
* $queue = Queue::getInstance('msg');
* 加入队列
* $queue->push('aaaaaa');
* $queue->push('bbbbb');
* 获取队列长度
* $queue->len();
* 读取队列
* $value = $queue->pop()
* 删除队列
* $queue->flushQueue();
*/
namespace Com;
class Queue extends \Think\Cache\Driver\Redis
{
static public $timeout = 1;
static public $queueName = 'queue';
/**
* 操作句柄
* @var string
* @access protected
*/
protected $handler;
/**
* 缓存连接参数
* @var integer
* @access protected
*/
protected $options = array();
/**
* 取得缓存类实例
* @static
* @access public
* @return mixed
*/
public static function getInstance($queueName, $options = [])
{
if (C('DATA_CACHE_TYPE') != 'Redis') exit('DATA_CACHE_TYPE DO NOT Support Redis');
//当前队列名称
self::$queueName = $queueName;
static $_instance = array();
if (!isset($_instance[$queueName])) {
$_instance[$queueName] = new Queue();
}
return $_instance[$queueName];
}
//设置队列名称
public static function setQueueName($name)
{
self::$queueName = $name;
}
/**
* 添加队列(lpush)
* @param string $value
* @return int 队列长度
*/
public function push($value)
{
return $this->lPush(self::$queueName, $value);
}
//brpop
/**
* 读取队列
* @return string|nil
*/
public function pop()
{
$result = $this->brPop(self::$queueName, self::$timeout);
return empty($result) ? $result : $result[1];
}
/**
* 删除一个消息队列
*/
public function flushQueue()
{
$this->delete(self::$queueName);
}
/**
* 返回队列长茺
* @return int
*/
public function len()
{
return $this->LLEN(self::$queueName);
}
}
?>https://github.com/cfanbo/thinkphp-redis-mq
ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。