レディス
- #パイプライン コマンド
- ##パブリッシュ/サブスクライブ
- #
はじめに
Redis は、オープンソースの高度なキーと値のペアのストレージ データベースです。 String、Hash、List、Set、Ordered Set というデータ型が含まれているため、多くの場合、データ構造サーバーと呼ばれます。
Laravel の Redis を使用する前に、Composer を通じて
predis/predis
拡張パッケージをインストールする必要があります:composer require predis/predis
または、PECL # を通じて PhpRedis# をインストールすることもできます# PHP 拡張子。この拡張機能はインストールがより複雑ですが、Redis を頻繁に使用するアプリケーションではパフォーマンスが向上する可能性があります。
構成Laravel アプリケーションの Redis 構成は、構成ファイルconfig/database.php にあります。 ## # 真ん中。このファイルでは、
redis
配列にアプリケーションで使用される Redis サーバー情報が含まれていることがわかります。
開発にはデフォルトのサーバー構成で十分です。もちろん、使用する環境に応じてこの配列を自由に変更することもできます。構成ファイルで各 Redis サーバーの名前、ホスト、ポートを指定するだけです。'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_DB', 0), ], 'cache' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => env('REDIS_CACHE_DB', 1), ], ],
クラスター構成アプリケーションで Redis サーバー クラスターを使用する場合は、Redis 構成ファイルの
clustersキーを使用してこれらのクラスターを定義する必要があります。
options
デフォルトでは、クラスターはノード上にクライアント側シャーディングを実装できるため、ノード プールを実装して大量の使用可能なメモリを作成できます。ここで、クライアント共有は障害ケースを処理しないことに注意してください。したがって、この機能は主に、別のマスター データベースから取得したキャッシュされたデータに適しています。 Redis ネイティブ クラスターを使用する場合は、構成ファイルの'redis' => [ 'client' => 'predis', 'clusters' => [ 'default' => [ [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], ], ], ],
キーで次のように指定する必要があります:
'redis' => [ 'client' => 'predis', 'options' => [ 'cluster' => 'redis', ], 'clusters' => [ // ... ], ],
Predisデフォルトの
host、
port
、database
、およびpassword
に加えてこれらのサービス構成オプションに加えて、Predis は各 Redis サーバーの他の接続パラメータ接続パラメータ
の定義もサポートします。これらの追加の構成オプションを使用する場合は、Redis サーバーの構成ファイル config/database.php に次の構成を追加できます:'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, 'read_write_timeout' => 60, ],
PhpRedis
PhpRedis 拡張機能を使用するには、構成ファイル
config/database.php
内の Redis 構成のclient
オプションを # に変更する必要があります。 ##phpredis:
'redis' => [ 'client' => 'phpredis', // 其余的Redis配置... ],
デフォルトのhost
、
port、
database、
passwordに加えてこれらのサービス構成オプション、PhpRedis いくつかの追加接続パラメータもサポートされています:
persistent、
prefix、
read_timeout、
timeout。これらの構成オプションは、Redis サービス構成項目の構成ファイル
config/database.phpに追加できます:
'default' => [ 'host' => env('REDIS_HOST', 'localhost'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, 'read_timeout' => 60, ],
Redis
ファサードでさまざまなメソッドを呼び出すことで、Redis と対話できます。
Redisファサードは動的メソッドをサポートしています。つまり、ファサードでさまざまな
Redis コマンドを呼び出すことができ、コマンドは Redis に直接渡されます。この例では、Redis の GETコマンドは、
Redisファサードの
getメソッドを介して呼び出されます。
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Redis; class UserController extends Controller{ /** * 显示给定用户的配置文件。 * * @param int $id * @return Response */ public function showProfile($id) { $user = Redis::get('user:profile:'.$id); return view('user.profile', ['user' => $user]); } }
前述のように、任意の Redis コマンドをRedis
ファサードで呼び出すことができます。 Laravel はマジック メソッドを使用して Redis サーバーにコマンドを渡すため、Redis コマンドに必要なパラメータを渡すだけです:
Redis::set('name', 'Taylor'); $values = Redis::lrange('names', 5, 10);
あるいは、command
メソッドを使用してコマンドを渡すこともできます。サーバーはコマンドの名前を最初の引数として、値の配列を 2 番目の引数として受け入れます:
$values = Redis::command('lrange', ['name', 5, 10]);
複数の Redis 接続の使用you Redis インスタンスは、Redis::connection
メソッドを通じて取得できます。
$redis = Redis::connection();
これにより、デフォルトの Redis インスタンスが返されます。接続またはクラスター名をconnection
メソッドに渡して、Redis 構成内の特定のサービスまたはクラスターを取得できます:
$redis = Redis::connection('my-connection');
##パイプライン コマンド一度の操作で多くのコマンドをサーバーに送信する必要がある場合は、パイプライン コマンドを使用することをお勧めします。
pipelineメソッドは、Redis インスタンスの
Closure
を受け入れます。すべてのコマンドを Redis インスタンスに送信すると、それらは 1 回の操作で実行されます:Redis::pipeline(function ($pipe) { for ($i = 0; $i < 1000; $i++) { $pipe->set("key:$i", $i); } });
パブリッシュとサブスクライブ
Laravel は、Redis の
publish
およびsubscribe
に便利なインターフェイスを提供します。これらの Redis コマンドを使用すると、指定した「チャネル」でメッセージをリッスンできます。他のプログラミング言語を使用しても、別のアプリケーションから別のアプリケーションにメッセージをパブリッシュできるため、アプリケーションとプロセスが簡単に通信できるようになります。まず、
subscribe
メソッドを使用してチャネル リスナーを設定します。subscribe
メソッドを呼び出すと長時間実行プロセスが開始されるため、このメソッド呼び出しを Artisan コマンドに配置します。<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Support\Facades\Redis; class RedisSubscribe extends Command{ /** * 控制台命令的名称和签名。 * * @var string */ protected $signature = 'redis:subscribe'; /** * 控制台命令说明。 * * @var string */ protected $description = 'Subscribe to a Redis channel'; /** * 执行控制台命令。 * * @return mixed */ public function handle() { Redis::subscribe(['test-channel'], function ($message) { echo $message; }); } }
これで、
publish
メソッドを使用してメッセージを送信できるようになります。チャネルに公開:Route::get('publish', function () { // 路由... Redis::publish('test-channel', json_encode(['foo' => 'bar'])); });
ワイルドカード サブスクリプション
psubscribe
メソッドを使用してワイルドカード チャネルにサブスクライブします。これを使用すると、すべての情報を取得できます。すべてのチャネルのメッセージ。$channel
名前は、指定されたコールバックの 2 番目のパラメーターとして渡されます。Closure
:Redis::psubscribe(['*'], function ($message, $channel) { echo $message;});Redis::psubscribe(['users.*'], function ($message, $channel) { echo $message; });