yutaponのブログ

javascript界隈の興味あるネタを備忘録的に残しておく場所

node.jsでRedisを使ってみる【準備編】

久しぶりにnode.jsです。
普通に動くAPIを用意したいので、ストレージを選定する必要があります。

候補としては

の3つがあったのですが、MySQLは結構つかったことがあるので
あまり使ったことのないRedisにしました。
機会があればMongoDBも扱いたいです。

Redisのインストール

作業中のマシンはMacOSX10.7.5です。
Redisのインストールにはhomebrewを利用します。
ちなみにhomebrewのバージョンは0.9.4でした。

$ brew install redis

これだけでインストールできます。
私はredis-2.6.13がインストールされました。

マシンの起動時にredisを立ちあげたい場合は
インストール時のメッセージにしたがって

$ ln -sfv /usr/local/Cellar/redis/2.6.13/homebrew.mxcl.redis.plist ~/Library/LaunchAgents/

とすれば良いみたい。
とりあえず今すぐRedisを起動したい場合は

$ redis-server

とすると立ち上がってくれます。
サーバーが立ち上がったのでちょっとしたRedisの操作は

$ redis-cli

で試してみることができます。



node.jsとredisの連携

クライアントのインストール

node.jsからredisに接続するには、まずはパッケージをインストールします。

$ npm install redis

これでnode用のredisクライアントがインストールできます。
公式のリファレンスが充実しているので、コードを見ているだけでも
ある程度使い方がわかるかと思います。
mranney/node_redis · GitHub

node.jsからredisに接続する

redisのサーバーがすでに立ち上がっている状態であれば、
redisに接続したい箇所でクライアントを作成します。

var client = require('redis').createClient();

var key = 'hoge:fuga';
var value = 'piyo';

// 文字列を保存する
client.set(key, value, function(){
  // コールバック
});

// 文字列を取得する
client.get(key, function(err, val){
  // コールバック
  if (err) return console.log(err);
  // エラーが無ければデータを取得できたということ
  console.log(val);
});

様々なredisの使い方

基本的には文字列型のset, getが使えれば
keyの設計次第でなんとでもなりそうなredis。

JSON.stringify()でJavaScriptオブジェクトを文字列に変換して
任意のkeyに入れて、取り出す時はJSON.parse()して
JavaScriptオブジェクトに変換すれば一応運用できます。

var client = require('redis').createClient();
var obj = { "status": 200, "message": "hogefuga" };

// JSオブジェクトを文字列に変換してsetする
client.set('key:test:0', JSON.stringify(obj), function(){});

// 文字列からJSオブジェクトに変換して利用する
client.get('key:test:0', function(err, val){
    if(err) return console.log(err);
    var data = JSON.parse(val);
    console.log(data);
});


でもせっかくなので勉強がてらハッシュやリストのデータ型を
使ってみたいですね。

やっぱりこの記事くらいRedisを使い倒してみたいです。
Redisを使ったレコメンド機能の実装 - maaash.jp



おわりに

今回はnode.jsからredisにアクセスできるようになっただけです。
ちょっと内容が薄くなってしまった・・。
次回はチャットを題材にkeyの設計などを考えてみようと思います。