Laravel 5.1 Redis

イントロダクション

Redisはオープンソースの進歩的なキー/値保存システムです。キーに文字列ハッシュリストセットソート済みセットが使用できるため、データ構造サーバーとしてよく名前が上がります。LaravelでRedisを使う前にpredis/predisパッケージ(~1.0)をComposerでインストールしておく必要があります。

設定

アプリケーションのRedis設定はconfig/database.phpファイルにあります。このファイルの中にredis配列があり、アプリケーションで使用されるRadisサーバーの設定を含んでいます。

'redis' => [

    'cluster' => false,

    'default' => [
        'host'     => '127.0.0.1',
        'port'     => 6379,
        'database' => 0,
    ],

],

デフォルトのサーバー設定は、開発時には十分でしょう。しかしご自由に自分の環境に合わせてこの配列を変更してください。各Redisサーバーに名前を与え、使用するホストとポートを指定するだけです。

ノードをプールしたり、巨大なRAMを使用可能にしたりするため、clusterオプションはRedisノード間に渡りクライアントサイドで共有する指示をLaravel Redisクライアントに対し行います。しかし注意すべきはクライアントサイドの共有ではフェイルオーバーが処理されないことです。そのため主な使い方は、他のプライマリーのデーター域からキャッシュデーターを使用できるようにすることでしょう。

Redis接続の定義の中でoptions配列値を定義することも追加で可能で、Predisクライアントオプションの設定を指定できます。

Redisサーバーが認証を求めている場合、Redisサーバー設定のpasswordオプションへキー/値のペアを指定してください。

注意: PECLでRedis PHP拡張をインストールしている場合、config/app.phpファイルのRedisエイリアスをリネームする必要があります。

基本的な使用法

Redisファサードのバラエティー豊かなメソッドを呼び出し、Redisを操作できます。Redisファサードは動的メソッドをサポートしています。つまりファサードでどんなRedisコマンドでも呼び出すことができ、そのコマンドは直接Redisへ渡されます。以下の例ではRedisのGETコマンドをRedisファサードのgetメソッドで呼び出しています。

<?php

namespace App\Http\Controllers;

use Redis;
use App\Http\Controllers\Controller;

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はmagicメソッドを使いコマンドをRedisサーバーへ送りますので、Redisコマンドで期待されている引数を渡してください。

Redis::set('name', 'Taylor');

$values = Redis::lrange('names', 5, 10);

サーバーにコマンドを送る別の方法はcommandメソッドを使う方法です。最初の引数にコマンド名、第2引数に値の配列を渡します。

$values = Redis::command('lrange', ['name', 5, 10]);

複数のRedis接続の使用

RedisインスタンスをRedis::connectionメソッドの呼び出しで取得できます。

$redis = Redis::connection();

これによりデフォルトのRedisサーバーのインスタンスが取得されます。サーバークラスタリングを使用していない場合、connectionメソッドにサーバー名を指定することで、Redis設定で定義している特定のサーバーを取得できます。

$redis = Redis::connection('other');

パイプラインコマンド

一回の操作でサーバーに対し多くのコマンドを送る必要がある場合はパイプラインを使うべきでしょう。pipelineメソッドは引数をひとつだけ取り、Redisインスタンスを取る「クロージャー」です。このRedisインスタンスで全コマンドを発行し、一回の操作で全部実行できます。

Redis::pipeline(function ($pipe) {
    for ($i = 0; $i < 1000; $i++) {
        $pipe->set("key:$i", $i);
    }
});

発行/購読

さらにLaravelはRedisのpublishsubscribeコマンドの便利なインターフェイスも提供しています。これらのRedisコマンドは指定した「チャンネル」のメッセージをリッスンできるようにしてくれます。他のアプリケーションからこのチャンネルにメッセージを公開するか、他の言語を使うこともでき、これによりアプリケーション/プロセス間で簡単に通信できます。

最初にsubscribeメソッドでRedisを経由するチャンネルのリスナーを準備します。subscribeメソッドは長時間動作するプロセスを開始しますので、このメソッドはArtisanコマンドの中で呼び出します。

<?php

namespace App\Console\Commands;

use Redis;
use Illuminate\Console\Command;

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引数として渡されます。

Redis::psubscribe(['*'], function($message, $channel) {
    echo $message;
});

Redis::psubscribe(['users.*'], function($message, $channel) {
    echo $message;
});

ドキュメント章別ページ

ヘッダー項目移動

注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。

移動

クリックで即時移動します。

設定

適用ボタンクリック後に、全項目まとめて適用されます。

カラーテーマ
和文指定 Pagination
和文指定 Scaffold
Largeスクリーン表示幅
インデント
本文フォント
コードフォント
フォント適用確認

フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。

フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。

バックスラッシュを含むインライン\Code\Blockの例です。

以下はコードブロックの例です。

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * ユーザに関連する電話レコードを取得
     */
    public function phone()
    {
        return $this->hasOne('App\Phone');
    }
}

設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。

キーボード・ショートカット

オープン操作

PDC

ページ(章)移動の左オフキャンバスオープン

HA

ヘッダー移動モーダルオープン

MS

移動/設定の右オフキャンバスオープン

ヘッダー移動

T

最初のヘッダーへ移動

E

最後のヘッダーへ移動

NJ

次ヘッダー(H2〜H4)へ移動

BK

前ヘッダー(H2〜H4)へ移動

その他

?

このヘルプページ表示
閉じる