Heim  >  Artikel  >  php教程  >  PHP队列框架WanQueue/文件/redis队列

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

PHP中文网
PHP中文网Original
2016-05-23 08:39:151811Durchsuche

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();
    }
}
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:身份证号码校验Nächster Artikel:PHP定时执行计划任务