キャッシュ
Redis をキャッシュドライバとして使う
キュー
Redis をキュードライバとして使う
ブロードキャスト
Pub/Sub でリアルタイム通信
Redis とは
Redis はオープンソースの高速なキー・バリューストアです。 文字列・ハッシュ・リスト・セット・ソート済みセットなど多様なデータ構造をサポートし、データ構造サーバーとも呼ばれます。 Laravel では以下の用途で Redis が使われます。クライアントの選択
Laravel は PhpRedis(PHP 拡張)と Predis(PHP パッケージ)の 2 つのクライアントをサポートしています。Laravel 13 ではデフォルトクライアントが PhpRedis です。本番環境では PhpRedis の使用を推奨します。
Laravel Sail を使っている場合は PhpRedis がすでにインストールされています。
設定
config/database.php
Redis の設定はconfig/database.php の redis 配列で管理します。
環境変数
.env で接続先を設定します。
TLS / SSL 接続
TLS 暗号化を使う場合はscheme オプションを指定します。
クラスタリング
複数の Redis サーバーをクラスターとして使う場合はclusters キーを使います。
options.cluster が redis に設定されており、ネイティブ Redis クラスタリングが使われます。
フェイルオーバーを自動で処理するため、本番環境での推奨設定です。
Predis でクライアントサイドシャーディングを使う場合は options.cluster を削除します。
ただしクライアントサイドシャーディングはフェイルオーバーを処理しないため、キャッシュなど一時的なデータにのみ適しています。
Predis の設定
Predis を使うにはpredis/predis パッケージをインストールし、REDIS_CLIENT を predis に変更します。
Predis のリトライ設定
Predis 3.4.0 以降では組み込みのリトライ・バックオフ設定が利用できます。max_retries オプションでリトライ回数を、retry オプションでバックオフ戦略を設定します。retry オプションには NoBackoff、EqualBackoff、ExponentialBackoff のいずれかのクラス名をキーとした配列を指定します。
parameters オプションでリトライを設定します。
PhpRedis の設定
PhpRedis は PECL 経由でインストールします(Laravel Sail では導入済み)。 PhpRedis は以下の追加オプションをサポートします:name, persistent, persistent_id, prefix, read_timeout, retry_interval,
max_retries, backoff_algorithm, backoff_base, backoff_cap, timeout, context
リトライとバックオフ設定
接続失敗時のリトライ動作を設定します。 サポートされるバックオフアルゴリズム:default, decorrelated_jitter, equal_jitter, exponential, uniform, constant
Unix ソケット接続
同一サーバー上の Redis に接続する場合、Unix ソケットを使うと TCP オーバーヘッドを削減できます。シリアライズと圧縮
PhpRedis では保存データのシリアライズと圧縮アルゴリズムを設定できます。
サポートされる圧縮アルゴリズム:
Redis との操作
Redis ファサード
Redis ファサードを使ってあらゆる Redis コマンドを実行できます。
ファサードはマジックメソッドでコマンドを Redis サーバーに転送します。
command メソッドを使ってコマンド名と引数を明示的に指定することもできます。
複数接続の使い分け
config/database.php で複数の Redis 接続を定義し、connection() メソッドで切り替えられます。
トランザクション
transaction() メソッドは Redis の MULTI/EXEC コマンドをラップします。
クロージャ内のすべてのコマンドがアトミックに実行されます。
Lua スクリプト
eval() メソッドで Lua スクリプトをアトミックに実行できます。
スクリプト内で Redis の値を参照・更新できる点でトランザクションより柔軟です。
KEYS[1], KEYS[2] がキー名、ARGV[1] 以降が追加引数として渡されます。
パイプライン
大量のコマンドを一度に送信してネットワークのラウンドトリップを削減できます。Pub / Sub
Redis のpublish / subscribe コマンドを使ってチャンネル経由でメッセージをやりとりできます。
サブスクライバー
subscribe() は長時間動作するプロセスなので、Artisan コマンド内で呼び出します。
パブリッシャー
別のリクエストやプロセスからメッセージを送信します。ワイルドカードサブスクリプション
psubscribe() でパターンマッチングのサブスクリプションができます。
まとめ
クライアントの選択
クライアントの選択
- 本番環境: PhpRedis(PECL 拡張、高パフォーマンス)
- 開発環境・インストールが難しい場合: Predis(Composer パッケージ)
- Laravel Sail: PhpRedis がデフォルトで導入済み
接続設定のポイント
接続設定のポイント
- 複数の Redis 接続は
config/database.phpで定義し、用途ごとに使い分ける(default/cacheなど) - クラスター環境では
clustersキーを使う - 本番環境では TLS 接続と認証情報の設定を検討する
操作の使い分け
操作の使い分け