easyswoole 啟動TableManager+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,[ '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
提前略帶講解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和它的相关作用. }
相關教學:PHP影片教學
#以上是easyswoole 啟動TableManager+Cache工具的原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

以下是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

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

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} ;#指明這個目錄不能在外部直接訪

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