Home  >  Article  >  php教程  >  PHP队列框架WanQueue/文件/redis队列

PHP队列框架WanQueue/文件/redis队列

PHP中文网
PHP中文网Original
2016-05-23 08:39:151779browse

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(&#39;18618300482@163.com&#39;,&#39;i love wanwan&#39;,&#39;i love you !&#39;));

job示例

<?php
namespace WanQueue\Jobs;
/**
 * Created by PhpStorm.
 * User: wanwan
 * Date: 16/2/27
 * Time: 下午3:33
 */
class Email implements Job{
    private $email=&#39;&#39;;
    private $title=&#39;&#39;;
    private $content=&#39;&#39;;
 
    function __construct($email,$title,$content)
    {
        $this->email=$email;
        $this->title=$title;
        $this->content=$content;
 
    }
 
    function handle()
    {
        // TODO: Implement handle() method.
 
        echo &#39;email to :&#39;,$this->email,&#39; theme : &#39;,$this->title ,&#39; send success !&#39;,"\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=&#39;&#39;;
  
    /**
     * Queue constructor. 加载队列
     * @param string $queueName  队列名称
     */
     function __construct($queueName=&#39;Queue&#39;)
    {
            $this->queueName=$queueName;
            $this->getRedisQueue();
    }
  
    /**
     * 获取队列---redis版
     */
    private function getRedisQueue(){
  
        if($this->queue==null){
            try {
                $this->queue = new \Redis();
                $this->queue->pconnect(&#39;127.0.0.1&#39;, 6379);
            } catch (Exception $e) {
                file_put_contents(date(&#39;Y-m-d&#39;).&#39;-redis.log&#39;,  date(&#39;Y-m-d H:i:s&#39;).&#39; : &#39;. $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();
    }
}
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:身份证号码校验Next article:PHP定时执行计划任务