Redisを使ってexpressでセッション管理をする

expressでユーザのセッションを引き継いでページ遷移させたいっていうのが結構あります。
その場合、よくRedisというキーバリューストア(KVS)モデルのデータベースが用いられるようです。
これまでのWebアプリケーションがMySQL + memcachedで構成されていたことを考えると
node.jsはMongoDB + Redisで構成されることがスタンダードになっていくのでしょうか。

さて、そのRedisのインストールは本家ページ(Redis)からwgetして解凍します。

$ wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
$ tar xzf redis-2.4.6.tar.gz
$ cd redis-2.4.6
$ make

サーバの立ち上げは

$ src/redis-server

で行います。

そのあとは例によってnpmモジュールのインストール。

$ npm install redis redis-client

Redisを用いてexpressフレームワークでセッションを使うときは次のように書きます。

var express = require('express'),
      RedisStore = require('connect-redis')(express);

app.configure(function () {
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.session({
        secret: 'your secret',
        store: new RedisStore,
        cookie: { maxAge: 3 * 60 * 60 * 1000,    // 3 hours
                  httpOnly: false
                }
    }));
});

これで

req.session.hogehoge = hoge;  // setter
var session = req.session.hogehoge;  // getter

みたいにしてセッションの値を保存したり参照できたりします。

また、Redisはサーバを落とさない限り、アプリを落としてもセッションが保存されているので、開発する時にも便利です。