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")
));
}
}