swoole4 MySQLの接続プールを作成します

1. MySQLの接続プールとは何ですか
シーン: 同時に並行あたり1000がありますが、これは唯一のMySQLがダウンタイムでしょう、400同時MySQLの接続を処理することができます。
 
解決策: 接続プール、接続プールの接続200とMySQLを確立するため、および1000は順序があります200の同時接続のこの接続プールを共有します。
接続プールは、接続が確立されているため、追加的なパフォーマンスの向上をもたらすとMySQLことができます。このプロセスは、接続プールのMySQLを使用して、より大きな、単一の接続を消費します。
 
接続プールの定義: このプログラムは、メモリ常駐プログラムであるに抜かないでください、私たちが必要となります。データベース接続プール(接続プーリング)プログラムが起動しています
十分なダイナミックデータベース接続を確立し、接続プール、プールがプログラムアプリケーションによって接続されて、放出の使用を形成するためにそれらを接続します。
 
II。小型ケース
最新の3人のメンバー登録ユーザデータベーステーブルを探しますか?
(1)のヒント
PROCESSLIST #mysqlビューの接続を示し
(2)サンプルコードコネクタ10 MySQLを作成します
<?phpの
/ **
 * PhpStormによって作成されます。
 *ユーザー:ルーク
 *日:2019年10月30日
 *時間:14:12
 * /
//書き込みmysqlの接続プール、クラスは一度だけインスタンス化することができます(シングルトン)
クラスMysqlConnectionPool
{
    プライベート静的$インスタンス; //シングルトンオブジェクト
    民間の$ connection_num = 10; //接続の数
    民間の$ connection_obj = [];
 
    //コンストラクタ接続MySQLは、20mysql接続を作成します
    プライベート関数の__construct()
    {
        {(I ++は$; $ I <の$ this - > connection_num $ I = 0)のための
            $のDSN = "mysqlの:ホスト= 127.0.0.1; dbnane = swoole";
            の$ this - > connection_obj [] =新しいPDO($ DSN、 'ルート'、 'rootmysql123');
        }
    }
    プライベート関数の__clone()
    {
        // TODO:__clone()メソッドを実装します。
    }
    パブリック静的関数のgetInstance()
    {
        もし(IS_NULL(自己:: $インスタンス)){
            自己:: $インスタンス=新しい自己();
        }
    }
}
MysqlConnectionPool ::のgetInstance();
// swool httpサーバオブジェクトを作成します。
$のSERV =新しいswoole_http_server( '0.0.0.0'、8000);
場合は、ブラウザ// HTTPサーバリンクこの時点、ブラウザは、HelloWorldを送信
$ serv->( '要求'、関数($要求、$応答)に{
    // $要求などのパラメータとして、すべての要求された情報を含みます
    // $応答は、HelloWorldのように、ブラウザにすべての情報が含まれています
 
    //(2.3)ブラウザのHelloWorldに送られます
    $対応 - >終了( "Hello World" の);
});
HTTP //サーバを起動します。
$ serv->スタート();
(3)効果
(4)MySQLの接続プールを改善します
<?phpの
/ **
 * PhpStormによって作成されます。
 *ユーザー:ルーク
 *日:2019年10月30日
 *時間:14:12
 * /
//書き込みmysqlの接続プール、クラスは一度だけインスタンス化することができます(シングルトン)
クラスMysqlConnectionPool
{
    プライベート静的$インスタンス; //シングルトンオブジェクト
    民間の$ connection_num = 20; //接続の数
    民間の$ connection_obj = [];
    民間の$ avil_connection_num = 20; //利用可能な接続
 
    //コンストラクタ接続MySQLは、20mysql接続を作成します
    プライベート関数の__construct()
    {
        {(I ++は$; $ I <の$ this - > connection_num $ I = 0)のための
            $のDSN = "mysqlの:ホスト= 127.0.0.1; DBNAME = swoole";
            の$ this - > connection_obj [] =新しいPDO($ DSN、 'ルート'、 'rootmysql123');
        }
    }
    プライベート関数の__clone()
    {
        // TODO:__clone()メソッドを実装します。
    }
    パブリック静的関数のgetInstance()
    {
        もし(IS_NULL(自己:: $インスタンス)){
            自己:: $インスタンス=新しい自己();
        }
        自己:: $インスタンスを返します。
    }
 
    // SQL操作を実行します
    パブリック関数のクエリ($ sqlを)
    {
        もし(の$ this - > avil_connection_num == 0){
            (「一時的に利用できません接続えっお待ちください」)新しい例外を投げます。
        }
        // SQL文を実行
        $ PDO = array_pop(の$ this - > connection_obj);
        //利用可能な接続の数を保存
        の$ this - > avil_connection_num - 。
        接続プールのMySQL接続クエリから削除//使用して実行され、データが連想配列に取り込まれ
        $行= $ PDO->クエリ($ sqlを) - > fetchAllの(PDO :: FETCH_ASSOC)。
        バック接続プールは、利用可能な接続数に// mysqlの接続1
        array_push(の$ this - > connection_obj、$のPDO)。
        の$ this - > avil_connection_num ++;
        $行を返します。
    }
}
// swool httpサーバオブジェクトを作成します。
$のSERV =新しいswoole_http_server( '0.0.0.0'、8000);
場合は、ブラウザ// HTTPサーバリンクこの時点、ブラウザは、HelloWorldを送信
$ serv->( '要求'、関数($要求、$応答)に{
    // $要求などのパラメータとして、すべての要求された情報を含みます
    // $応答は、HelloWorldのように、ブラウザにすべての情報が含まれています
    ブラウザに送信// HelloWorldの
    $ = falseを停止します。
    しばらく(!$停止){
        {試します
            $ sqlを= "のid DESCをLIMIT 5によるユーザORDER SELECT * FROM";
            $行= MysqlConnectionPool ::のgetInstance() - >クエリ($ sqlを);
            $対応 - >終了(json_encode($行));
            $ =真停止。
        }キャッチ(例外の$ E){
            usleep(100000)。
        }
    }
 
});
HTTP //サーバを起動します。
$ serv->スタート();

おすすめ

転載: www.cnblogs.com/starluke/p/11770799.html