Azure WebsitesのPHPでAzure Redisをセッションハンドラとして利用する


Microsoft Azureでは、Redisによるキャッシュのサービスが提供されていますが、そのComputingサービスの一つであるAzure WebsitesからAzure Redis Cacheにアクセスするためにはひと手間必要になります。

ここではその方法に加え、Azure Redisをセッションハンドラとして利用する方法を説明します。

なお今回は、PHPは32bitのバージョン5.4とし、Redis clientにはphpredisを利用します(Predisは特に設定など必要なくサンプルの通りにやればできるので)。

  1. 適当なAzure Websitesを作成します。
  2. RedisにアクセスするためのExtensionファイルを取得します。
    http://windows.php.net/downloads/pecl/snaps/redis/ 下の最新バージョンのディレクトリから、利用する環境にあったファイルをダウンロードしてください。
    ファイル名から環境は判断できます。
    php_redis-{phpredisのversion}-{PHPのversion}-{ThreadSafe(ts)/Non-ThreadSafe(nts)}-{vcのversion}-{CPUアーキテクチャ}.zip

    Azure WebsitesではNon-ThreadSafeを選択する必要があります。
    例えば今回は32bitのPHP 5.4を利用するので、php_redis-2.2.5-5.4-nts-vc9-x86.zip をダウンロードします。

  3. ダウンロードしたファイルを解凍します。
  4. 解凍したファイルの内、php_redis.dllをWebsitesのドキュメントルート(wwwroot)のbinフォルダにアップロードします。
  5. Azureの管理画面で、対象のWebsitesに対して設定をします。
    https://portal.azure.com/
    にアクセスします。
  6. 対象のWebsitesの「SETTINGS」 → Settingsの「Application Settings」 → 「Site Settings」のPHP versionに「5.4」を選択し、App settingsに、「Key = PHP_EXTENSIONS、Value = bin\php_redis.dll」を追加して保存します。
    phpinfo()を表示してredisが有効になっていることを確認しましょう。

    Azure WebsitesのPHPにおけるRedis Extensionの設定

    Azure WebsitesのPHPにおけるRedis Extensionの設定

  7. ここまででAzure WebsitesからAzure Redisにアクセスするための設定はできました。
    簡単なサンプルコードを動かして確認してみましょう。

    <?php
    $redis = new Redis();
    $redis->connect('{Azure Redis Cacheの名前}.redis.cache.windows.net', 6379);
    $redis->auth('{Azure Redis CacheのKEY}');
    $redis->set('foo', 'bar');
    echo $redis->get('foo');
    $redis->close();
    ?>
  8. 続いてAzure Redisをセッションハンドラーとして利用する設定をします。
    セッションハンドラーを変更するためには、PHPの実行時設定のsession.save_handlerとsession.save_pathを.user.iniファイルで設定します。
    .user.iniファイルの内容

    session.save_handler = redis
    session.save_path = "tcp://{Azure Redis Cacheの名前}.redis.cache.windows.net:6379?auth={urlencodeしたAzure Redis CacheのKEY}"

    ※ session.save_pathのauthパラメータの値はurlencodeする必要があります。

  9. .user.iniファイルをAzure Websitesのphpスクリプトのフォルダにアップロードして5分待ちます。
    (user_ini.cache_ttlにより300秒ごとに変更が適用されるため)
  10. これでセッションハンドラーとしてAzure Redisが利用できるようになりました。
    簡単なサンプルコードを動かして確認してみましょう。

    <?php
    session_start();
    echo $_SESSION['foo'];
    $_SESSION['foo'] = 'bar';
  11. Azure Redis内の値がどうなっているかは、redis-cliなどで確認するとよいでしょう。
    > redis-cli -h {Azure Redis Cacheの名前}.redis.cache.windows.net -p 6379 -a {Azure Redis CacheのKEY}
    *****.redis.cache.windows.net:6379> keys *
    1) "PHPREDIS_SESSION:AS-eLjyJoYlttlpHNOKxxRYGt_WuZ1SPifh955p6IZo"

以上、Azure WebsitesからAzure Redis Cachesを利用する手順でした。

[変更履歴]


コメントをどうぞ