easyswoole table缓存

本文介绍如何在EasySwoole框架中集成FastCache组件,实现数据缓存及同步功能,包括设置定时频率、启动时加载缓存、守护进程停止时保存数据等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 在EasySwooleEvent.php中的mainServerCreate方法,增加如下内容:
use EasySwoole\FastCache\Cache;
use EasySwoole\FastCache\CacheProcessConfig;
use EasySwoole\FastCache\SyncData;
use EasySwoole\Utility\File;
// 每隔5秒将数据存回文件
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;
  }
});

// 在守护进程时,php easyswoole stop 时会调用,落地数据
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());
  • 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;
use EasySwoole\FastCache\Cache;
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']);
            }
            Cache::getInstance()->set('index_video_data_cat_id_'.$catId,$data);
//            $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/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=is_file($videoFile)?file_get_contents($videoFile):[];
   //$videoData=!empty($videoData)?json_decode($videoData,true):[];
   $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');
}
  • App/Model/Video.php
<?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->orderBy('id','desc');
        $this->db->where('status',0);
        $res = $this->db->where('cat_id',$condition['cat_id'])->get($this->tableName,[0,$size],'*');
        return $res;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值