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