- crontab定时任务
- vendor\dragonmantank\cron-expression\src\Cron\CronExpression.php
在factory函数里面增加以下代码:
‘@minute’ => ‘*/1 * * * *’ - EasySwooleEvent.php
- 在mainServerCreate函数里面增加如下代码:
use App\Crontab\TaskApi; Crontab::getInstance()->addTask(TaskApi::class);
- App/Crontab/TaskApi.php
<?php namespace App\Crontab; use EasySwoole\EasySwoole\Crontab\AbstractCronTask; class TaskApi extends AbstractCronTask { public static function getRule(): string { // TODO: Implement getRule() method. // 定时周期 (每分钟) return '@minute'; } public static function getTaskName(): string { // TODO: Implement getTaskName() method. // 定时任务名称 return 'taskApi'; } static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null) { // TODO: Implement run() method. // 定时任务处理逻辑 var_dump('run once per minute'); } }
代码如下:
- EasySwooleEvent.php
- 在mainServerCreate函数里面增加如下代码:
use App\Crontab\TaskApi; Crontab::getInstance()->addTask(TaskApi::class);
- App/Lib/Cache/Video.php
<?php /** * Created by PhpStorm. * User: niuyueyang * Date: 2019/7/24 * Time: 22:07 */ namespace App\Lib\Cache; use App\Model\Video as VideoModel; class Video{ public function setIndexVideo() { $catIds=array_keys(\Yaconf::get('category.cats')); array_unshift($catIds,0); $modelObj=new VideoModel(); // 写 video json 缓存数据 foreach($catIds as $catId) { $catId=intval($catId); $condition=[]; $condition['cat_id'] = $catId; try{ $data=$modelObj->getVideoCacheData($condition); }catch(\Exception $e){ $data=[]; } if(empty($data)){ continue; } foreach ($data as &$list){ $list['create_time'] = date("Ymd H:i:s", $list['create_time']); $list['video_duration'] = gmstrftime("%H:%M:%S", $list['video_duration']); } $flag = file_put_contents(EASYSWOOLE_ROOT."/webroot/json/".$catId.".json", json_encode($data)); if(empty($flag)){ echo $catId.'error'.PHP_EOL; } else{ echo $catId.'success'.PHP_EOL; } } } }
- App/Model/Video.php(添加如下方法)
public function getVideoCacheData($condition=[],$size=1000){ $this->db->where('status',0); $res = $this->db->where('cat_id',$condition['cat_id'])->get($this->tableName,[0,$size],'*'); return $res; }
- 上述文件整体代码如下:
<?php /** * Created by PhpStorm. * User: niuyueyang * Date: 2019/7/17 * Time: 18:45 */ namespace App\Model; class Video extends Base{ public $tableName='video'; public $db=''; public function __construct() { $conf = new \EasySwoole\Mysqli\Config(\EasySwoole\EasySwoole\Config::getInstance()->getConf('MYSQL')); $this->db = new \EasySwoole\Mysqli\Mysqli($conf); } public function getVideoData($condition=[],$page=1,$size=10){ $this->db->orderBy('id','desc'); $res = $this->db->where('cat_id',1)->get($this->tableName,[($page-1)*$size,$size],'*'); $count=$this->db->where('cat_id',1)->count($this->tableName); $data=[ 'list'=>$res, 'count'=>$count, 'page'=>$page, 'size'=>$size ]; // $sql = $this->db->getLastQuery(); return $data; } public function getVideoCacheData($condition=[],$size=1000){ $this->db->where('status',0); $res = $this->db->where('cat_id',$condition['cat_id'])->get($this->tableName,[0,$size],'*'); return $res; } }
- App/Crontab/TaskApi.php
<?php /** * Created by PhpStorm. * User: niuyueyang * Date: 2019/7/24 * Time: 21:55 */ namespace App\Crontab; use EasySwoole\EasySwoole\Crontab\AbstractCronTask; use App\Lib\Cache\Video; class TaskApi extends AbstractCronTask { public $model=''; public function __construct() { $this->model=new Video(); } public static function getRule(): string { // TODO: Implement getRule() method. // 定时周期 (每分钟) return '@minute'; } public static function getTaskName(): string { // TODO: Implement getTaskName() method. // 定时任务名称 return 'taskApi'; } static function run(\swoole_server $server, int $taskId, int $fromWorkerId,$flags=null) { // TODO: Implement run() method. // 定时任务处理逻辑 $model=new Video(); $model->setIndexVideo(); var_dump('run once per minute'); } }
- App/HttpController/Api/Index.php
增加如下方法(对外提供api)
public function lists(){ $params=$this->request()->getRequestParam(); $catId=!empty($params['cat_id'])?intval($params['cat_id']):1; $videoFile=EASYSWOOLE_ROOT."/webroot/json/".$catId.".json"; $videoData=is_file($videoFile)?file_get_contents($videoFile):[]; $videoData=!empty($videoData)?json_decode($videoData,true):[]; //分页计算 $count=count($videoData); $totalPage=ceil($count/$params['size']); $from=($params['page']-1)*$params['size']; $videoData=array_splice($videoData,$from,$params['size']); $result=[ 'totalPage'=>$totalPage, 'currentPage'=>$params['page'], 'count'=>intval($count), 'lists'=>$videoData ]; return $this->writeJson(200, $result,'ok'); }
- vendor\dragonmantank\cron-expression\src\Cron\CronExpression.php
easyswoole静态化api
最新推荐文章于 2021-10-15 13:39:29 发布