聊聊php怎麼讓Swoole/Pool程序池實現Redis持久連線

2023-02-08 14:02:08

本篇文章給大家帶來了關於php的相關知識,其中主要介紹了通過PHPphp讓Swoole/Pool程序池實現Redis持久連線,感興趣的朋友下面一起來看一下吧,希望對大家有幫助。

php 讓 Swoole | Pool程序池實現Redis持久連線

程序池,基於Swoole\Server的Manager管理程序模組實現。可管理多個工作程序,相比 Process 實現多程序,Process\Pool 更加簡單,封裝層次更高,開發者無需編寫過多程式碼即可實現程序管理功能,配合 Co\Server 可以建立純協程風格的,能利用多核 CPU 的伺服器端程式。

Swoole程序池實現redis資料讀取

如下案例,通過WorkerStart啟動Redis程序池,並持久讀取Redis列表資料;當WorkerStop斷開所有連線時回收所有子程序。

第一步:編碼程式碼

檔案:d10.php

<?php

use Swoole\Process;
use Swoole\Coroutine;

// 指定5個工作程序
$pool = new Process\Pool(5);
// 設定啟用協程
$pool->set(['enable_coroutine' => true]);

/**
* onWorkerStart 子程序啟動
* @param \Swoole\Process\Pool $pool Pool物件
* @param int $workerId   WorkerId當前工作程序的編號,底層會對子程序進行標號
**/
$pool->on("WorkerStart", function (Process\Pool $pool, $workerId) {
// 輸出當前工作程序
   echo "Worker #{$workerId} is started\n";

   // 範例化化連線redis
   $redis = new Redis();
   $redis->pconnect('127.0.0.1', 6379);
   // 指定redis鍵
   $key = "key1";

   // 迴圈讀取列表資料
   while (true) {
    // 彈出列表最後一個元素
       $msgs = $redis->brpop($key, 2);
       // 元素值為空則跳過
       if ( $msgs == null) {
           continue;
       }
       // 列印獲取的值
       var_dump($msgs);
       echo "Processed by Worker#{$workerId}\n";
   }
});

// 子程序結束
$pool->on("WorkerStop", function ($pool, $workerId) {
   echo "Worker#{$workerId} is stopped\n";
});

// 啟動工作程序
$pool->start();
登入後複製

第二步:啟動Redis服務並通過使用者端寫列表資料

該案例需要php安裝redis擴充套件

# 通過redis使用者端連線
./redis-cli

127.0.0.1:6379> lpush key1 'world'
登入後複製

複製程式碼

第三步:執行d10.php

php d10.php
登入後複製

第四步:檢視程序

ps aux | grep php
root        938  0.0  1.2 129164 12412 ?        Ss   Apr21   0:00 php-fpm: master process (/usr/local/php-8.0.1/etc/php-fpm.conf)
www         951  0.0  0.6 129164  6636 ?        S    Apr21   0:00 php-fpm: pool www
www         952  0.0  0.6 129164  6640 ?        S    Apr21   0:00 php-fpm: pool www
root      12327  0.0  1.2 126992 12800 pts/2    S+   00:02   0:00 php d10.php
root      12328  0.0  0.7 131096  7444 pts/2    S+   00:02   0:00 php d10.php
root      12329  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12330  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12331  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12332  0.0  0.7 131096  7448 pts/2    S+   00:02   0:00 php d10.php
root      12355  0.0  0.0 112812   976 pts/3    R+   00:09   0:00 grep --color=auto php
登入後複製

第五步:輸出結果

php d10.php

Worker #1 is started
Worker #2 is started
Worker #3 is started
Worker #4 is started
Worker #0 is started
array(2) {
 [0]=>
 string(4) "key1"
 [1]=>
 string(5) "world"
}
Processed by Worker#1
登入後複製

d10.php檔案執行後會一直處於阻塞狀態而一直讀取redis列表資料,一旦Redis列表中輸出,則立刻被彈出並列印在螢幕中。

推薦學習:《》

以上就是聊聊php怎麼讓Swoole/Pool程序池實現Redis持久連線的詳細內容,更多請關注TW511.COM其它相關文章!