Skip to main content
Redis はインメモリのキー・バリューストアで、Laravel の多くの機能のバックエンドとして使われます。 設定から操作・Pub/Sub まで、Laravel での Redis の使い方を解説します。

キャッシュ

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.phpredis 配列で管理します。

環境変数

.env で接続先を設定します。
URL 形式での指定も可能です。

TLS / SSL 接続

TLS 暗号化を使う場合は scheme オプションを指定します。

クラスタリング

複数の Redis サーバーをクラスターとして使う場合は clusters キーを使います。
デフォルトでは options.clusterredis に設定されており、ネイティブ Redis クラスタリングが使われます。 フェイルオーバーを自動で処理するため、本番環境での推奨設定です。 Predis でクライアントサイドシャーディングを使う場合は options.cluster を削除します。 ただしクライアントサイドシャーディングはフェイルオーバーを処理しないため、キャッシュなど一時的なデータにのみ適しています。

Predis の設定

Predis を使うには predis/predis パッケージをインストールし、REDIS_CLIENTpredis に変更します。
Predis 固有の接続パラメーターを追加できます。

Predis のリトライ設定

Predis 3.4.0 以降では組み込みのリトライ・バックオフ設定が利用できます。max_retries オプションでリトライ回数を、retry オプションでバックオフ戦略を設定します。retry オプションには NoBackoffEqualBackoffExponentialBackoff のいずれかのクラス名をキーとした配列を指定します。
Redis クラスターで Predis を使う場合は、クラスター設定の 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 コマンドをラップします。 クロージャ内のすべてのコマンドがアトミックに実行されます。
トランザクション内では Redis から値を取得できません。 クロージャ全体が実行されてから EXEC でまとめて実行されるためです。

Lua スクリプト

eval() メソッドで Lua スクリプトをアトミックに実行できます。 スクリプト内で Redis の値を参照・更新できる点でトランザクションより柔軟です。
引数の順序: Lua スクリプト → キー数 → キー名… → 追加引数… KEYS[1], KEYS[2] がキー名、ARGV[1] 以降が追加引数として渡されます。

パイプライン

大量のコマンドを一度に送信してネットワークのラウンドトリップを削減できます。
パイプラインはコマンドをまとめて送信するだけで、アトミックではありません。 アトミックな操作が必要な場合はトランザクションまたは Lua スクリプトを使ってください。

Pub / Sub

Redis の publish / subscribe コマンドを使ってチャンネル経由でメッセージをやりとりできます。

サブスクライバー

subscribe() は長時間動作するプロセスなので、Artisan コマンド内で呼び出します。

パブリッシャー

別のリクエストやプロセスからメッセージを送信します。

ワイルドカードサブスクリプション

psubscribe() でパターンマッチングのサブスクリプションができます。

まとめ

  • 本番環境: PhpRedis(PECL 拡張、高パフォーマンス)
  • 開発環境・インストールが難しい場合: Predis(Composer パッケージ)
  • Laravel Sail: PhpRedis がデフォルトで導入済み
  • 複数の Redis 接続は config/database.php で定義し、用途ごとに使い分ける(default / cache など)
  • クラスター環境では clusters キーを使う
  • 本番環境では TLS 接続と認証情報の設定を検討する
最終更新日 2026年7月3日