検索
ホームページPHPフレームワークSwooleSwoole の動作: キャッシュ操作にコルーチンを使用する方法

Swoole の動作: キャッシュ操作にコルーチンを使用する方法

Nov 07, 2023 pm 03:00 PM
コルーチンキャッシュ操作swoole

Swoole の動作: キャッシュ操作にコルーチンを使用する方法

Swooleは、高性能な非同期ネットワークフレームワークとして、近年開発者に好まれ、さまざまな分野で広く利用されています。コルーチンは、Swoole を使用する上で非常に重要な概念の 1 つであり、これにより、同期的な方法で非同期コードを作成できるようになります。この記事では、Swoole でのキャッシュ操作にコルーチンを使用する方法を紹介し、実用的なコード例を示します。

1. コルーチンとは何ですか?

コルーチンはユーザー モードの軽量スレッドであり、プログラマによってコードを通じて管理され、システム スレッドの消費や切り替えが回避されます。 Swoole では、コルーチンを使用して、データベース接続や Redis 操作など、I/O 集中型のネットワーク操作の問題を解決できます。コルーチンは、I/O 操作が発生したときに積極的に制御を放棄し、操作の完了後に実行を再開できます。

2. Swoole のコルーチン サポート

Swoole はバージョン 1.8.0 からコルーチン サポートを導入し、コルーチン、go、defer、channel などのコルーチン スケジューリングを実装するための一連の API を提供します。

1. コルーチン

コルーチンはコルーチンの基本的な操作であり、関数をコルーチンに変換できます。たとえば:

function test()
{
    echo "start
";
    Coroutine::sleep(1);
    echo "end
";
}

Coroutine::create('test');
echo "hello
";

この例では、次のように変換します。テスト関数をコルーチンに組み込み、Coroutine::create() を使用してコルーチンを作成します。コルーチンでは、Coroutine::sleep() を使用して I/O 操作をシミュレートします。この操作により、コルーチンは 1 秒間一時停止し、その後再開され、「end」を出力し続けます。最後に、「hello」が出力されます。これは、コルーチンの非同期の性質を示しています。

2. go

go は、関数をコルーチンとして実行できる特別な関数です (例:

go(function(){
    echo "hello
";
    Coroutine::sleep(1);
    echo "world
";
});
echo "start
";

)。この例では、 go() を使用します。匿名関数を実行します。関数では、「hello」を出力し、1秒間停止し、「world」を順番に出力します。最後に、「start」が出力されます。これは、コルーチンを使用してこの関数を同時に実行していることを証明しています。

3. defer

#defer を使用すると、データベース接続の終了、リソースの解放など、コルーチンの最後でクリーンアップ作業を実行できます。 #

go(function(){
    $db = new Redis();
    $db->connect('127.0.0.1', 6379);
    defer(function() use ($db) {
        $db->close();
    });

    $db->set('key', 'value');
    Coroutine::sleep(1);
    $value = $db->get('key');
    echo $value."
";
});

この例では、defer を使用してコルーチンの最後に Redis 接続を閉じます。 defer を使用しない場合、コルーチンの終了時に接続を閉じるのを忘れて、接続数がリークする可能性があります。

4、channel

channel は Swoole によって提供されるパイプのようなメカニズムで、複数のコルーチン間の通信を可能にします。たとえば、次のようになります。

$chan = new CoroutineChannel(1);

go(function() use($chan) {
    $data = Coroutine::getuid();
    $chan->push($data);
});

$data = $chan->pop();
echo $data."
";

この例では、次のようにします。容量 1 のチャネルを作成し、コルーチンのチャネルにデータをプッシュし、別のコルーチンのチャネルにデータをポップして出力します。チャネルを使用すると、コルーチン間でデータを転送し、共同タスク処理を完了できます。

3. コルーチン操作のキャッシュ

実際の開発において、キャッシュは非常に重要なコンポーネントであり、データベースの負荷を軽減し、キャッシュ ヒットによるデータの読み取り速度を向上させることができます。 Swoole では、Redis などのインメモリ データベースを使用してキャッシュを実装すると同時に、コルーチンを使用してキャッシュの同時実行パフォーマンスを向上させることができます。

1. Redis への接続

Swoole のコルーチン Redis クライアントを使用して Redis データベースに接続し、同時に操作します。コードは次のとおりです:

$redis = new SwooleCoroutineRedis();
$redis->connect('127.0.0.1', 6379);

go(function () use ($redis) {
    $redis->set('name', 'Bob');
    $name = $redis->get('name');
    echo "name=$name
";
});

go(function () use ($redis) {
    $redis->set('age', 18);
    $age = $redis->get('age');
    echo "age=$age
";
});

SwooleCoroutine::sleep(1);

この例では、 Swoole のコルーチン Redis クライアントを使用して Redis データベースに接続しました。次に、コルーチンの形式で読み取りおよび書き込み操作を実行し、コルーチン内で関連する結果を出力しました。最後に、SwooleCoroutine::sleep() を使用して一定時間待機し、コルーチンが完了したことを確認します。同様の方法で、他のインメモリ データベースに接続して操作できます。

2. キャッシュ操作

Redis に接続した後、一連のキャッシュ コマンドを使用して操作できます。たとえば、キャッシュ データを設定するには、set() メソッドを使用できます。

$redis->set('key', 'value');

ここで、「key」はキャッシュ データのキー、「value」はキャッシュ データの値です。キャッシュされたデータを読み取るには、get() メソッドを使用できます。

$value = $redis->get('key');

コルーチンでは、上記のコマンドを使用して同時に操作できます。例:

go(function() use($redis){
    $redis->set('key1', 'value1');
    $value1 = $redis->get('key1');
    echo "key1=$value1
";
});

go(function() use($redis){
    $redis->set('key2', 'value2');
    $value2 = $redis->get('key2');
    echo "key2=$value2
";
});

SwooleCoroutine::sleep(1);

この例では、2 つのコルーチンで 2 つのキャッシュされたデータをそれぞれ設定および読み取り、操作を同時に実行します。これは、コルーチンがキャッシュされたデータの同時実行パフォーマンスを向上できることを証明しています。

3. 操作キャッシュと MySQL

実際のアプリケーションでは、通常、操作のためにキャッシュと MySQL を組み合わせる必要があります。たとえば、最初にキャッシュからデータを読み取ります。キャッシュが存在しない場合は、次にキャッシュからデータを読み取り、MySQL に読み取ります。 Swoole のコルーチン開発では、次のようなメソッドを使用してこの操作を実装できます:

$redis = new SwooleCoroutineRedis();
$redis->connect('127.0.0.1', 6379);

$mysql = new SwooleCoroutineMySQL();
$mysql->connect([
    'host' => '127.0.0.1',
    'port' => 3306,
    'user' => 'root',
    'password' => '123456',
    'database' => 'test',
]);

go(function() use($redis, $mysql) {
    $name = $redis->get('name');
    if($name === false) {
        $result = $mysql->query('select * from user where id=1');
        if(!empty($result)) {
            $name = $result[0]['name'];
            $redis->set('name', $name);
        }
    }
    echo "name=$name
";
});

go(function() use($redis, $mysql) {
    $age = $redis->get('age');
    if($age === false) {
        $result = $mysql->query('select * from user where id=1');
        if(!empty($result)) {
            $age = $result[0]['age'];
            $redis->set('age', $age);
        }
    }
    echo "age=$age
";
});

SwooleCoroutine::sleep(1);

この例では、コルーチン操作メソッドを使用し、最初にキャッシュからの読み取りを試みます。そうでない場合はデータを取得します。キャッシュ内で、MySQL からデータを読み取ります。 MySQL を操作するときは、スレッドのブロックを回避して効率を向上させるためにコルーチンも使用します。最後に、この演算方法が正しいことを証明するために、読み取り結果を印刷しました。

上記は Swoole でのキャッシュ操作にコルーチンを使用する具体的な実装方法ですが、コルーチンを使用するとキャッシュ操作の効率や同時実行性能が向上し、MySQL などの他の操作と組み合わせることができます。実際の開発では、上記の方法で練習し、実際の状況に応じて調整や変更を加えることができます。

以上がSwoole の動作: キャッシュ操作にコルーチンを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。