首頁 後端開發 php教程 easyswoole 啟動TableManager+Cache工具的原理

easyswoole 啟動TableManager+Cache工具的原理

Apr 26, 2019 pm 03:07 PM
cache

本篇文章的主要內容是講述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,[
        &#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服務新增了一個進程。 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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

入職後,我才明白什麼叫Cache 入職後,我才明白什麼叫Cache Jul 31, 2023 pm 04:03 PM

事情其實是這樣的,當時領導者交給我一個perf硬體效能監視的任務,在使用perf的過程中,輸入指令perf list,我看到了以下資訊:我的任務就要讓這些cache事件能夠正常計數,但重點是,我根本不知道這些misses、loads是什麼意思。

使用cache可以提高計算機運行速度這是因為什麼 使用cache可以提高計算機運行速度這是因為什麼 Dec 09, 2020 am 11:28 AM

使用cache可以提高電腦運行速度這是因為Cache縮短了CPU的等待時間。 Cache是​​位於CPU和主記憶體DRAM之間,規模較小,但速度很高的記憶體。 Cache的功能是提高CPU資料輸入輸出的速率;Cache容量小但速度快,記憶體速度較低但容量大,透過最佳化調度演算法,系統的效能會大幅提升。

cache、rom、ram的特徵是什麼 cache、rom、ram的特徵是什麼 Aug 26, 2022 pm 04:05 PM

cache的特性:在CPU與主記憶體之間設定的一級或兩級高速小容量記憶體,其資訊是隨著電腦的斷電自然遺失。 ROM的特性:只能從記憶體讀取數據,而不能往裡面寫訊息,電腦斷電後數據仍然存在。 ram的特點:既可以從記憶體讀取數據,也可以到記憶體中寫入資訊;用於存放運行程式所需的命令、程式和資料等;電腦斷電後資訊自然遺失。

cache是​​什麼記憶體? cache是​​什麼記憶體? Nov 25, 2022 am 11:48 AM

cache叫做高速緩衝記憶體,是介於中央處理器與主記憶體之間的高速小容量記憶體,一般由高速SRAM構成;這種局部記憶體是面向CPU的,引進它是為減少或消除CPU與記憶體之間的速度差異對系統性能帶來的影響。 Cache容量小但速度快,記憶體速度較低但容量大,透過最佳化調度演算法,系統的效能會大幅提升。

nginx反向代理快取教學。 nginx反向代理快取教學。 Feb 18, 2024 pm 04:48 PM

以下是nginx反向代理快取的教學:安裝nginx:sudoaptupdatesudoaptinstallnginx設定反向代理:開啟nginx設定檔:sudonano/etc/nginx/nginx.conf在http區塊中加入以下設定來啟用快取:http{...proxy_cache_path /var/cache/nginxlevels=1:2keys_zone=my_cache:10mmax_size=10ginactive=60muse_temp_path=off;proxy_cache

SpringBoot專案中怎麼使用快取Cache SpringBoot專案中怎麼使用快取Cache May 16, 2023 pm 02:34 PM

前言快取可以透過將經常存取的資料儲存在記憶體中,減少底層資料來源如資料庫的壓力,從而有效提高系統的效能和穩定性。我想大家的專案中或多或少都有使用過,我們專案也不例外,但是最近在review公司的程式碼的時候寫的很蠢且low,大致寫法如下:publicUsergetById(Stringid){Useruser=cache. getUser();if(user!=null){returnuser;}//從資料庫取得user=loadFromDB(id);cahce.put(id,user);returnu

Nginx快取Cache的設定方案及相關記憶體佔用問題怎麼解決 Nginx快取Cache的設定方案及相關記憶體佔用問題怎麼解決 May 23, 2023 pm 02:01 PM

nginx快取cache的5種方案 1、傳統快取之一(404)  這個辦法是把nginx的404錯誤導向到後端,然後用proxy_store把後端回傳的頁面儲存。設定:  location/{  root/home/html/;#主目錄expires1d;#網頁的過期時間error_page404=200/fetch$request_uri;#404定向到/fetch目錄下}  location/fetch/{#404定向到/fetch目錄下}  location/fetch/{#4044042cation} ;#指明這個目錄不能在外部直接訪

基於Spring Cache如何實現Caffeine+Redis二級緩存 基於Spring Cache如何實現Caffeine+Redis二級緩存 Jun 01, 2023 am 10:13 AM

具體如下:一、聊聊什麼是硬程式編碼使用快取?在學習SpringCache之前,筆者常會硬編碼的方式使用快取。我們來舉個實際中的例子,為了提升使用者資訊的查詢效率,我們對使用者資訊使用了緩存,範例程式碼如下:@AutowireprivateUserMapperuserMapper;@AutowireprivateRedisCacheredisCache;//查詢使用者publicUsergetUserById(LonguserId){//定義快取keyStringcache= "userId_

See all articles