php队列框架wanqueue/文件队列,可快速切换到reids/mysql等任何队列。开心/方便/简单。
运行 php wanqueue/console/queueserver.php 开启队列服务
//添加任务到队列
$que=new wanqueue\queue\queue();
$que->push(new wanqueue\jobs\email('18618300482@163.com','i love wanwan','i love you !'));
使用方法
<?php
//自动加载自己写
//添加队列任务
$que=new wanqueue\queue\queue();
$que->push(new wanqueue\jobs\email('18618300482@163.com','i love wanwan','i love you !'));
job示例
<?php
namespace wanqueue\jobs;
/**
* created by phpstorm.
* user: wanwan
* date: 16/2/27
* time: 下午3:33
*/
class email implements job{
private $email='';
private $title='';
private $content='';
function __construct($email,$title,$content)
{
$this->email=$email;
$this->title=$title;
$this->content=$content;
}
function handle()
{
// todo: implement handle() method.
echo 'email to :',$this->email,' theme : ',$this->title ,' send success !',"\n";
}
}
redis驱动队列
<?php
namespace wanqueue\queue;
/**
* created by phpstorm.
* user: wanwan
* date: 16/2/24
* time: 上午10:33
*/
class queue{
private $queue=null;
private $queuename='';
/**
* queue constructor. 加载队列
* @param string $queuename 队列名称
*/
function __construct($queuename='queue')
{
$this->queuename=$queuename;
$this->getredisqueue();
}
/**
* 获取队列---redis版
*/
private function getredisqueue(){
if($this->queue==null){
try {
$this->queue = new \redis();
$this->queue->pconnect('127.0.0.1', 6379);
} catch (exception $e) {
file_put_contents(date('y-m-d').'-redis.log', date('y-m-d h:i:s').' : '. $e->getmessage(), file_append);
}
}
}
/**
* 获取队列-----文件版
*/
private function getqueue(){
$queue=__dir__."/queue/{$this->queuename}.queue";
if(!is_file($queue)){
return [];
}
return json_decode(file_get_contents($queue),true);
}
/**
* 队列持久化----文件版
*/
private function setqueue(){
if(!is_dir(__dir__."/queue")){
mkdir(__dir__."/queue");
}
file_put_contents(__dir__."/queue/{$this->queuename}.queue",json_encode($this->queue));
}
/**
* 入队
* @param $value
* @return int
*/
function push($value){
return $this->queue->rpush($this->queuename,serialize($value));
}
/**
* 出队
* @return mixed
*/
function pop(){
return unserialize($this->queue->lpop($this->queuename));
}
/**
* 从开始入队
* @param $value
* @return int
*/
function prepush($value){
return $this->queue->lpush($this->queuename,serialize($value));
}
/**
* 从末尾出队
* @return mixed
*/
function popl(){
return unserialize($this->queue->rpop($this->queuename));
}
/**
* 队列保存
*/
function __destruct()
{
// todo: implement __destruct() method.
//$this->setqueue();
}
}