>백엔드 개발 >PHP 튜토리얼 >Easyswoole의 TableManager+Cache 도구 시작 원리

Easyswoole의 TableManager+Cache 도구 시작 원리

little bottle
little bottle앞으로
2019-04-26 15:07:233222검색

이 글의 주요 내용은 TableManager를 시작하는 방법과 Cache 도구의 원리를 이해하기 위한 easyswoole 코드를 설명하는 것입니다. 이는 특정 참조 가치가 있으므로 관심 있는 친구는 반드시 이해해야 합니다.

EasySwoole은 Swoole Server를 기반으로 개발된 메모리 상주 PHP 프레임워크로 API용으로 설계되었으며 프로세스 활성화 및 파일 로딩 시 기존 PHP 작동 모드로 인해 발생하는 성능 손실을 제거합니다. EasySwoole은 Swoole Server의 원래 기능을 유지하면서 동시에 HTTP, 맞춤형 TCP 및 UDP 프로토콜의 혼합 모니터링을 지원하므로 개발자는 최소한의 비용으로 다중 프로세스, 비동기 및 고가용성 애플리케이션을 작성할 수 있습니다. 학습 비용과 노력.

swoole_table은 공유 메모리 및 잠금을 기반으로 하는 초고성능 동시 데이터 구조입니다. 다중 프로세스/다중 스레드 데이터 공유 및 동기 잠금 문제를 해결하는 데 사용됩니다.

TableManager는 주로 다음 작업을 수행합니다
add method
$list 배열에 이 테이블 이름이 있으면($name은 테이블 이름 또는 컬렉션 이름) 초기화됩니다. swoole_table을 생성한 다음 구성된 필드 유형 배열

if(!isset($this->list[$name])){
    $table = new Table($size);
    foreach ($columns as $column => $item){
        $table->column($column,$item['type'],$item['size']);
    }
    $table->create();
    $this->list[$name] = $table;
}

get method
을 생성합니다. swoole_table의 인스턴스를 직접 반환합니다.

사용하는 곳은 많습니다
앞서 언급했듯이 시스템이 Cache 구성요소를 설정할 때 Cache::getInstance()

구성 방법은 다음과 같습니다. things#🎜 🎜#

$num = intval(Config::getInstance()->getConf("EASY_CACHE.PROCESS_NUM"));//Config默认配置是1,如果配置为小于等于0则不开启Cache
if($num <= 0){
   return;
}
$this->cliTemp = new SplArray();
//若是在主服务创建,而非单元测试调用
if(ServerManager::getInstance()->getServer()){
    //创建table用于数据传递
    TableManager::getInstance()->add(self::EXCHANGE_TABLE_NAME,[
        &#39;data&#39;=>[
            &#39;type&#39;=>Table::TYPE_STRING,
            &#39;size&#39;=>10*1024
        ],
        &#39;microTime&#39;=>[
            &#39;type&#39;=>Table::TYPE_STRING,
            &#39;size&#39;=>15
        ]
    ],2048);
    //创建了一个__Cache的swoole_table表,字段为 data String 10240,microTime String 15的表
    $this->processNum = $num;
    for ($i=0;$i < $num;$i++){
        ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class);
    }
}

ProcessManager도 매우 중요한 개념입니다. 실제로는 작업 매핑을 관리하기 위한 도구입니다.


여기에서 ProcessManager::getInstance()->addProcess($this->generateProcessName($i),CacheProcess::class)

#🎜🎜를 볼 수 있습니다. #실제로 스울 서비스는 ProcessManager를 통해 프로세스를 추가합니다. swoole의 addProcess 메소드, 문서 링크 https://wiki.swoole.com/wiki/page/390.html

미리 Cache에 대해 간단히 설명하자면 set 메소드는 개념을 심화시킵니다

//讲解一下Cache的set方法加深概念
if(!ServerManager::getInstance()->isStart()){//兼容测试模式。也就是不开启服务的情景下直接是clitemp中取缓存数据
    $this->cliTemp->set($key,$data);
}
if(ServerManager::getInstance()->getServer()){
    $num = $this->keyToProcessNum($key);//这里是通过key然后hash到应该投放的Cache进程中去。
    $msg = new Msg();
    $msg->setCommand(&#39;set&#39;);
    $msg->setArg(&#39;key&#39;,$key);
    $msg->setData($data);
    //下面一句话还是挺复杂的,根据key名hash到ProcessManager对应的映射,然后获取到swoole_process的实例,以swoole的write函数向管道内写入数据。
    ProcessManager::getInstance()->getProcessByName($this->generateProcessName($num))->getProcess()->write(\swoole_serialize::pack($msg));
    //在写完数据后,在CacheProcess的onReceive方法中可以看到对应setCommand的操作细节。其实数据都被写到了一个Arr数组中。下篇接着讲一下Cache的实现细节。这节还是主要讲TableManager和它的相关作用.
}

관련 튜토리얼:

PHP 비디오 튜토리얼

위 내용은 Easyswoole의 TableManager+Cache 도구 시작 원리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제