ホーム < ゲームつくろー! < IKD備忘録

Redis-PHP(WARP)
WARP環境構築備忘録


 Windows-ApacheにPHP(v5.4.9)が入っている環境にデータベースの一つであるRedisを入れようとしたのですが、思いの外悪戦苦闘してしまいました。環境構築の備忘録を以下に記します。



@ データベース「Redis」

 データベースには色々な種類があります。超有名なのはMySQLですね。MySQLは「リレーショナルデータベースシステム」という方式でデータを管理します。あるデータの一塊を表す「鍵(キー)」を定義して、キーに紐付いたデータを列の名前から取得する方法です。列が別のキーであれば、それに紐付いたデータも取り出せます。この方式は古くから使われていたのですが、昨今の超巨大で枠にはまらない情報を格納・管理するのに少し限界がある方式になってしまいました。そこでMySQLとはまた違う方式でデータを格納しようというデータベースが世の中に色々と登場してきました。それらは「NoSQL」というカテゴリーで呼ばれています。

 RedisはNoSQLの一つで「キーバリューストア(Key Value Store: KVS)という方式でデータを格納・管理するデータベースです。一つの「キー」に対して一つの「値」が定義されるという大変にシンプルな方式です。値には文字列や数値の他リスト、セット、ハッシュを保持できるため、ディレクトリようなデータ構造を作る事が出来ます。

 このRedisをWindows上で使おうというのが本章の目的です。


A RedisをWindowsで動かす

 Windows用のRedisはMSOpenTechが公開している以下のGitHubからDLできます:

https://github.com/MSOpenTech/redis

 サイトのbin/releaseにある「redisbin.zip」を解凍するとWindows用のRedisセットを得られます。その中の「redis-server.exe」がRedis本体(Redisサーバ)です。Redisサーバを動かすと、そこにデータファイル(dump.rdb)が出来るので、解凍したファイル群を管理しやすい場所(C:\redis\dataなど)にコピーしておきましょう。

 redis-server.exeを実行すると次のようなコンソールが立ち上がり、redisサーバが起動します:

 これでRedisがローカル環境で使える状態になりました。さくっと使うにはredis-server.exeと同じフォルダにあるredis-cli.exeというクライアントアプリを使うのが楽なのですが、この章はPHP上でRedisを使えるようにする環境構築のお話が主軸なので、redisの使い方については割愛します。


B PHP-Redis環境を作る

 続いてRedisをPHPから使えるようにするための環境を構築します。前提としてWindows(私の環境はXP(^-^;)とPHP(5.4.9)、そしてapacheがすでに入っているとします。PHPのバージョンは重要なので、違う方は以下の導入方法に対し適宜ご対応下さい。

 PHPからRedisを使うにはいくつか方法があるようなのですが、私は結果としてうまくいった「phpredis」を使いました。phpredisをLinux環境で構築する方法はWeb沢山ありますが、Windowsに入れる方法や必要なリソースが中々見つかりませんでした。

 まずPHPがロードするWindows用のDLLが必要です。これは以下のサイトにありました:

 nicolasff/phpredis (GitHub): https://github.com/nicolasff/phpredis/downloads

 ここの「phpredis_5.4_vc9_ts.7z」という圧縮ファイルをDLします。7-Zip圧縮なので解凍できるアプリをどこかで手に入れて下さい。下に「phpredis_5.4_vc9_nts.7z」という大変似たアーカイブもあります。_tsはスレッドセーフ(thread safe)なのに対し_ntsはスレッドセーフでは無いパッケージです。後者の方が高速ですがスレッドセーフでは無いので、非同期管理したくないのであれば_tsをDLして下さい。

 先のアーカイブを解凍すると2つのファイルが出来ます:

・ php_redis.dll
・ php_igbinary.dll

 php_redis.dllが本体、php_igbinary.dllはPHPのシリアライザのコンパクションを行うライブラリのようです(詳細はこちら)。この2つのDLLをPHPのインストールフォルダのextフォルダにコピーします。

 続いてこのDLLをPHPに認識させるため、PHPのインストールフォルダにあるphp.iniファイルに以下の項目を追加します:

php.ini
extension=php_igbinary.dll
extension=php_redis.dll

 大切なのは「この順番」で両方とも追加する事です!これ、ハマりました(-_-;。iniファイルを更新したら、apacheを再起動します。

 ちゃんと認識したか確認するにはphpinfo()を叩くのが手っ取り早いです。webから認識できるフォルダ(apacheのhtdocフォルダ等apacheで設定してあるフォルダ)にphpinfo.phpというPHPファイルを追加して、以下のコードを打ち込みます:

phpinfo.php
<?php
    phpinfo();
?>

で、このphpを呼び出します。ローカルからならブラウザを立ち上げて「localhost/phpinfo.php」です:

サイトを検索して「redis」という項目が見えれば大成功〜。見えなければPHPがうまくDLLを認識していません。この状態を確保できたら、PHP側でRedisデータベースにアクセスする事が出来るようになります。


 実際、こう認識するまでに色々試行錯誤しました。php_redis.dllは世界中のあちこちに色々なバージョンが落ちていて、入れては駄目、入れては駄目を繰り返しました。php_igbinary.dllを入れないと認識しないとか、extentionの宣言順番を間違うと駄目とか、ハマり箇所が色々あります。やれやれです(^-^;