初めてRedisいじってみた

KVSとしてMemcachedが有名ですが、それと肩を並べるぐらいよく聞くようになった気がします。

というわけで触ってみた。

Redisとは?

・インメモリデータベース

・永続化

複数のデータ型

・しかも高速に処理する

(redis 2.0.3 documentationより)

特にWebサービスで使われるリアルタイムランキングを実現したいときにRedisでやってるのが多いようなので、それっぽいのを軽く動かしてみました。

通常のランキングはcron等で仕込んだ定期的なプログラムを実行してSQLを投げて書き換えるってことをしていると思いますが、それだと数分に1回ぐらいが限度。

なのでリアルタイムになんらかの数字を出したいってのは需要があると思います。

インストール

$ wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz

$ tar xvzf redis-2.6.14.tar.gz | rm redis-2.6.14.tar.gz

$ cd redis-2.6.14

$ make

$ make test # これは確認のため

実際に動かしてみる(その1)

# 起動(設定ファイルある場合は指定。なければデフォルト。)

$ .src/redis-server /usr/local/etc/redis.conf

# コマンドラインで操作

$ ./src/redis-cli

redis 127.0.0.1:6379> set sample hello

OK

redis 127.0.0.1:6379> get sample

"hello"

# expire的に制限時間を入れる場合(秒指定)

redis 127.0.0.1:6379> SETEX test 600 world

こんな感じでキーを指定して保存するだけ。

GETで取れてることも確認。

すげぇ簡単。

実際に動かしてみる(その2)

PHPで動かしてみます。

公式サイトから対応するライブラリをダウンロード。

今回は、「Predis」ってのを使ってみます。

$ git clone git@github.com:nrk/predis.git

$ vi redis.php

PHPのコード

require 'predis/autoload.php';

Predis\Autoloader::register();

$redis = new Predis\Client();

// キー指定で設定

$redis->set('foo', 'bar');

// キー指定で取得

$value = $redis->get('foo');

echo $value.PHP_EOL;

// ソート済みセット型

// 設定

$redis->zadd('ranking', 3,1);

// 現在のスコアを取得

$value = $redis->zscore('ranking', 1);

echo $value.PHP_EOL;

では実行してみる

$ php redis.php

bar

3

まとめ

すげぇ簡単やけど動いた。

あとは適材適所に適当に関数化して呼んであげればいけそう。

独り言

酒飲みながら、ラピュタ見ながら書いたから誤字脱字あったらごめんなさい。