skymvc开发手册之队列的配置以及实现
查看视频教程或者获取有关《skymvc开发手册》更多信息

skymvc默认支持文件队列、mysql队列、redis队列。大家也可以自己扩展所需的队列。

文件:skymvc/library/cls_queue.php 

队列的操作方法,默认是文件的方式实现队列

$que=new queue($type="",$key=1,$num=2)
    lpush 左边插入
    rpop 右边取出
    rpush 右边插队
    getList 获取队列列表
$queue=new queue();
$que->lpush(array(
    "action"=>"sendsms",
    "data"=>array(
        "telephone"=>15985840591,
        "content"=>"老雷祝您圣诞节快乐"
    )
));
$task=$que->rpop();
if($error){
    $que->rpush($task);
}

队列的配置

<?php
//设置默认的队列实现方式 可选file、mysql、redis,默认file
define("QUEUE_TYPE","");
//按需加载下面文件
require "extends/queue/mysql.php";
require "extends/queue/redis.php";
?>


mysql的队列实现

文件位置:extends/queue/mysql.php

<?php
/*
*mysql队列
CREATE TABLE `sky_queue` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `orderindex` int(10) unsigned NOT NULL DEFAULT '0',
  `k` varchar(32) NOT NULL DEFAULT '',
  `content` text,
  PRIMARY KEY (`id`),
  KEY `k_dateline` (`k`,`orderindex`)
) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4;


**/
class mysqlQueue{
	
	public static function lpush($k,$v){
		M("queue")->changenum("orderindex",1,"k='".$k."' ");
		M("queue")->insert(array(
			"content"=>arr2str($v),
			"k"=>$k,
			"orderindex"=>0
		));
	}
	public static function rpop($k){
		$row=M("queue")->selectRow(array(
			"order"=>"orderindex DESC",
			"limit"=>1,
			"where"=>"k='".$k."' "
		));
		if(empty($row)){
			return false;
		}
		M("queue")->delete("id=".$row["id"]);
		return str2arr($row["content"]);
		 
	}
	public static function rpush($k,$v){
		M("queue")->insert(array(
			"content"=>arr2str($v),
			"k"=>$k,
			"orderindex"=>time()
		));
	}
	
	public static function getList($k){
		$list=M("queue")->select(array(
			"order"=>"orderindex DESC",
			"where"=>"k='".$k."' "
		));
		$nlist=[];
		if($list){
			foreach($list as $k=>$v){
				$nlist[]=str2arr($v["content"]);
				 
			}
		}
		return $nlist;
	}
}

Redis队列的实现

文件位置:extends/queue/redis.php

<?php
/*
*redis队列
**/
 
class redisQueue{
	public static $redis;
	public static $redisKey="skymvc_queue";
	public static function init(){
		self::$redis=new redis();
		self::$redis->connect("127.0.0.1","6379");
	}
	public static function  lpush($k,$v){
		self::$redis->lpush(self::$redisKey.$k,json_encode($v));
	}
	public static function  rpop($k){
		$row=self::$redis->rpop(self::$redisKey.$k);
		return json_decode($row,true);
	}
	
	public static function  rpush($k,$v){
		self::$redis->rpush(self::$redisKey.$k,$v);
	}
	
	public static function  getList($k){
		return self::$redis->lRange(self::$redisKey.$k, 0, -1);
		 
	}
}


具体代码

<?php 
class test_queueControl extends skymvc{
	
	public function __construct(){
		parent::__construct();
	}
	public function onDefault(){
		 
		$que=new queue("mysql");
		/* 
		for($i=1;$i<10;$i++){
			$que->lpush($i);
		}
		*/ 
		print_r($que->rpop());
		print_r($que->getList());  
		
	}
	public function onTest(){
		$que=new queue("mysql");
		$que->lpush(array(
			"time"=>date("H:i:s")
		));
		 
	}
	
}