中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

easyswoole啟動TableManager+Cache工具的原理是什么

發布時間:2020-11-03 13:40:26 來源:億速云 閱讀:153 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關easyswoole啟動TableManager+Cache工具的原理是什么的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。

EasySwoole 是一款基于Swoole Server 開發的常駐內存型PHP框架,專為API而生,擺脫傳統PHP運行模式在進程喚起和文件加載上帶來的性能損失。EasySwoole 高度封裝了Swoole Server 而依舊維持Swoole Server 原有特性,支持同時混合監聽HTTP、自定義TCP、UDP協議,讓開發者以最低的學習成本和精力編寫出多進程,可異步,高可用的應用服務。

swoole_table一個基于共享內存和鎖實現的超高性能,并發數據結構。用于解決多進程/多線程數據共享和同步加鎖問題。

TableManager主要做了下面幾件事
add方法
如果$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方法
   直接返回swoole_table的實例。

使用的地方有很多
前文提到的在系統設置Cache組件 Cache::getInstance()的時候

構造方法做了如下事情

$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,[
        'data'=>[
            'type'=>Table::TYPE_STRING,
            'size'=>10*1024
        ],
        'microTime'=>[
            'type'=>Table::TYPE_STRING,
            'size'=>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服務添加了一個進程。swoole的addProcess方法,文檔鏈接https://wiki.swoole.com/wiki/page/390.html

easyswoole啟動TableManager+Cache工具的原理是什么

提前略帶講解一下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('set');
    $msg->setArg('key',$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和它的相關作用.
}

感謝各位的閱讀!關于easyswoole啟動TableManager+Cache工具的原理是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

灵璧县| 原平市| 嫩江县| 潼南县| 建始县| 龙江县| 额尔古纳市| 东明县| 新民市| 桦川县| 西乌| 静海县| 赤城县| 西和县| 广宗县| 清远市| 秦皇岛市| 泰顺县| 原阳县| 永昌县| 开封县| 巴林左旗| 柳河县| 大港区| 泾川县| 灵台县| 噶尔县| 扶风县| 东辽县| 内丘县| 察哈| 冷水江市| 托克逊县| 奉贤区| 常州市| 镇江市| 九台市| 乡宁县| 阿巴嘎旗| 灵山县| 林芝县|