- 在EasySwooleEvent.php中的mainServerCreate方法,增加如下内容:
use EasySwoole\FastCache\Cache;
use EasySwoole\FastCache\CacheProcessConfig;
use EasySwoole\FastCache\SyncData;
use EasySwoole\Utility\File;
Cache::getInstance()->setTickInterval(5 * 1000);
Cache::getInstance()->setOnTick(function (SyncData $SyncData, CacheProcessConfig $cacheProcessConfig) {
$data = [
'data' => $SyncData->getArray(),
'queue' => $SyncData->getQueueArray(),
'ttl' => $SyncData->getTtlKeys(),
];
$path = EASYSWOOLE_TEMP_DIR . '/FastCacheData/' . $cacheProcessConfig->getProcessName();
File::createFile($path,serialize($data));
});
Cache::getInstance()->setOnStart(function (CacheProcessConfig $cacheProcessConfig) {
$path = EASYSWOOLE_TEMP_DIR . '/FastCacheData/' . $cacheProcessConfig->getProcessName();
if(is_file($path)){
$data = unserialize(file_get_contents($path));
$syncData = new SyncData();
$syncData->setArray($data['data']);
$syncData->setQueueArray($data['queue']);
$syncData->setTtlKeys(($data['ttl']));
return $syncData;
}
});
Cache::getInstance()->setOnShutdown(function (SyncData $SyncData, CacheProcessConfig $cacheProcessConfig) {
$data = [
'data' => $SyncData->getArray(),
'queue' => $SyncData->getQueueArray(),
'ttl' => $SyncData->getTtlKeys(),
];
$path = EASYSWOOLE_TEMP_DIR . '/FastCacheData/' . $cacheProcessConfig->getProcessName();
File::createFile($path,serialize($data));
});
Cache::getInstance()->setTempDir(EASYSWOOLE_TEMP_DIR)->attachToServer(ServerManager::getInstance()->getSwooleServer());
<?php
namespace App\Lib\Cache;
use App\Model\Video as VideoModel;
use EasySwoole\FastCache\Cache;
class Video{
public function setIndexVideo() {
$catIds=array_keys(\Yaconf::get('category.cats'));
array_unshift($catIds,0);
$modelObj=new VideoModel();
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']);
}
Cache::getInstance()->set('index_video_data_cat_id_'.$catId,$data);
}
}
}
- App/HttpController/Api/Index.php
use EasySwoole\FastCache\Cache;
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=Cache::getInstance()->get('index_video_data_cat_id_'.$catId);
var_dump($videoData);
$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');
}
<?php
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
];
return $data;
}
public function getVideoCacheData($condition=[],$size=1000){
$this->db->orderBy('id','desc');
$this->db->where('status',0);
$res = $this->db->where('cat_id',$condition['cat_id'])->get($this->tableName,[0,$size],'*');
return $res;
}
}