LoginSignup
12
12

More than 5 years have passed since last update.

Heroku + PHP で Redis(Redis To Go)をセッションストレージに利用する

Posted at

Heroku 環境で、PHP のセッションストレージとして、Redis(Redis To Go)を利用する手順です。

Redis To Go アドオンを追加

Redis サーバとして、Redis To Go アドオンを利用します。(無料プラン(Nano)あり: 接続数上限=10 / データベース=1 / インスタンスサイズ=5MB)

https://addons.heroku.com/redistogo

$ heroku addons:add redistogo

composer.json に redis 拡張を追加

Heroku 上の PHP で、redis 拡張を使うために composer.jsonredis を追加しておきます。

{
  "require": {
    "ext-redis": "*"
  }
}

環境変数から接続情報を取得

Redis To Gos アドオンを追加すると、Redis To Go への接続情報が環境変数REDISTOGO_URLにセットされます。

REDISTOGO_URLの内容は下記のような URL の形式になっています。

REDISTOGO_URL=redis://redistogo:xxxxxxxxxxxxxxxxxxxxxxxx@xxxxx.redistogo.com:PORT/

これを PHP のparse_url()でパースします。

<?php
$url = parse_url(getenv('REDISTOGO_URL'));

スクリプトを実行すると、$urlの各要素には下記のようになります。

  • $url['host'] = 接続ホスト名
  • $url['port'] = 接続ポート
  • $url['pass'] = 接続パスワード

この内容を接続情報として利用します。

セッションハンドラに設定する

redis 拡張のセッションハンドラをini_setで設定します。session.save_pathには、環境変数から取得した値を元に接続情報を記載します。

パスワードをauth=PASSのようにクエリストリングで指定するのがポイントです。

<?php
const SESSION_KEY = 'count';

$url = parse_url(getenv('REDISTOGO_URL'));

$redisServer = sprintf('tcp://%s:%d?auth=%s', $url['host'], $url['port'], $url['pass']);

ini_set('session.save_handler', 'redis');
ini_set('session.save_path', $redisServer);

// session
session_start();

if (empty($_SESSION[SESSION_KEY])) {
    $_SESSION[SESSION_KEY] = 0;
}

$_SESSION[SESSION_KEY]++;

var_dump($_SESSION);

Laravel で接続する

まず、Redis サーバへの接続情報をapp/config/database.phpに接続情報をセットしています。

<?php

$redisUrl = parse_url(getenv('REDISTOGO_URL'));

return [
    'redis' => [
        'cluster' => false,
        'default' => [
            'host' => $redisUrl['host'],
            'port' => $redisUrl['port'],
            'database' => 0,
            'password' => $redisUrl['pass'],
        ],
    ],
];

次に、app/config/session.phpで、ドライバを、redis に設定します。

<?php

return [
    'driver' => 'redis',
];

また、app/config/cache.phpで、ドライバを redis にしておけば、キャッシュも Redis サーバに保存されます。

<?php

return [
    'driver' => 'redis',
];
12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12