Redisとは、キーバリューモデルのNoSQLで使えるDBです。
memcachedとは違い、メモリから定期的にディスクに書き出しを行うので、DBのデータを永続化できる事が特徴です。
ちなみにRedisの書き込み形式は下記のようなものがあります。
String型 | 1つのKeyに対して、1つに定まる文字列や数値。 |
List型 | 1つのKeyに対して、順番を持った複数の値の集合。 |
Set型 | 1つのKeyに対して、順不同の複数の値の集合。Listと違い値の重複を許さない。 |
Sorted Set型 | スコアを持てるようになったSet型。スコア順に取り出したりできる。 |
Hash型 | 1つのKeyに対して、fieldを複数定義でき、filedの中にvalueをセットする値の集合。 |
今回、Node.jsからHash型のRedisを操作する機会がありました。
Node.jsで、逐次送り付けられるコマ撮り画像を保存し、そのURLを返却する、という要件です(ざっくりで済みません)。
その際に使ったnode-redisの知見を残します。
下記は、画像URLの保存と、画像URLの出力を想定したサンプルになります。
1. Redisの読み込み
1 2 |
var redis = require("redis"); var redis_client = redis.createClient(); |
2. Redisに値をセット
1 2 |
// Key名はインクリメントを想定したID。Fieldは'url'。Valueは保存したいURL。 redis_client.hset(1, 'url', 'http://marunouchi-tech.i-studio.co.jp/wp-content/uploads/2014/12/techun.png'); |
3. Redisから値を取得
1 2 3 4 5 |
// 上記2番でセットしたkey名を元に呼び出し、コールバックでオブジェクトを受け取る。 redis_client.hgetall(1, function (err, obj) { console.dir(obj); } |
1 |
結果:{ url: 'http://marunouchi-tech.i-studio.co.jp/'} |
4. Redisに何件Keyが入っているか取得
1 2 3 4 |
redis_client.keys('*', function (err, keys) { console.log(keys.length); } |
1 |
結果:1 |
要件として、1秒に10回保存、状態によっては1秒に10回出力する必要があったのですが、この何の捻りのない方法でも、テスト用の一番安いEC2サーバーで要件を達成できました。
Redis素晴らしい…。