Database JUNKY

MySQL,MariaDBを中心としたブログです

KVS redis phpから利用してみる(phpredis)

KVS redis php クライアントモジュールのインストール」にてphpから利用できるようになりました。簡単なソースですが、phpからこれを使うソースについて説明したいと思います。下記のサンプルは、単純に、値をセットしたものを呼び出すサンプルです。redisの利用用途がまだぼやっとして浮かんでいないので、あまり参考にならないかもしれません。

【検証環境について】

すんません・・こんだけです。何を説明したかったかというと、単に出回っているサンプルが、ローカルホストを前提に書かれているものが多かったため、あえてそうしました。もちろんローカルに、redisがあろうが、リモートにredisがあろうが、なんも変わらないのですが。

あ、一点だけ違いがありました。redisをデフォルトでインストールした場合、ローカルからのみしか接続を許可していないので、この部分のみ変更が必要です。当方は、yumでインストールしましたので、設定ファイルが、/etc/redis.conf ですが、redis.confがそこにあるかについてはおのおのの環境に併せて読んでください。

[/etc/redis.conf]

[shell]

If you want you can bind a single interface, if the bind option is not

specified all the interfaces will listen for incoming connections.

#

bind 127.0.0.1

[/shell]

bindの箇所を、コメントアウトして、redisを再起動しておいてください。まあもしくは、上記の例でいきますと、サブネットで制限かけたほうがセキュリティ上は好ましいかもしれませんが

実際のソース

phpでは以下のように記載しました。 [php] <html> <body> <?php $redis = new Redis(); if ($redis->connect('192.168.101.81', 6379)) { print("redis connect OK"); } else { print("redis connect NG"); } echo "<BR>";

echo "--set url--<BR>"; $redis->set(val, 'http://www.s-quad.com');

echo "--get url--<BR>"; $result = $redis->get(val);

print("URL-->" . $result . "<BR>");

?> </body> </html> [/php]

んと・・接続したら、valに、http://www.s-quad.comという値を入れて、それを表示するだけのサンプル・・。もうちょっとましなことしようと思ったのですが、それはまた気が向いたときにします。

結果、以下のようになりました。

まあ、当然このような結果になりますよね。これだけだとつまらないので、memcachedとどこが違うのか?なんていうのを見てみたいと思いますが、そうですね。。。上記の例で、redisサーバをOSごと再起動してしまいましょう。 再起動したら、phpのソースを以下のように書き換えてみます。 [php] <body> <?php $redis = new Redis(); if ($redis->connect('192.168.101.81', 6379)) { print("redis connect OK"); } else { print("redis connect NG"); } echo "<BR>";

echo "--NOT set url--<BR>"; // セットの部分をコメントアウトしてみます // $redis->set(val, 'http://www.s-quad.com'); echo "--get url--<BR>"; $result = $redis->get(val);

print("URL-->" . $result . "<BR>");

?> </body> </html> [/php]

$redis->set(val, 'http://www.s-quad.com')の箇所をコメントアウトしてみました。memcachedですと、再起動して時点で、データは消えますが、redisの場合はどうでしょうか?結果は以下のようになりました

お!?ちゃんと値を保守してくれています。びっくり!これが、永続的memcachedといわれる所以ですね。このしくみは、さりげなく、非同期でディスクに書き込んでおり、こんなところに保存しているからできる技なんです。 [shell]

ll /var/lib/redis/dump.rdb

-rw-r--r-- 1 redis redis 58  7月 31 22:21 /var/lib/redis/dump.rdb [/shell]

OS再起動時に上記 *.rdbファイルを読み込み再セットしているのですね。えらい!!

予想通り、phpの部分をほとんど触れていない記事になってしまいましたが、kvs、およびNoSQL全般に言えることなのですが、いくらデータを保障するといっても、一般的にいう、RDBMSのそれとはまた違い、かなり楽観的なものだと思いますので、これらの利用用途は結構限定されるかな?と思いました。もちろん、redisはすばらしいと思うところが前提にある話しです。私の説明では、本来 KVSの利点である、クラスタリング、シャーデイング、レプリケーションなど一切触れていないので、「じゃあ、MySQLとかでいいんじゃん」と思ってしまうかもしれませんが、これらの技術を活用した場合、本当に高速なサイトを構築できると思っております。

また、機会がありましたら、掲載したいと思います。

尚、phpredisの関数リファレンスについては、ここしか見つからなかったため、まんまここを参考にしました。 http://code.google.com/p/phpredis/wiki/referencemethods