Node.jsでキャッシュ機構をつかう

isaacs/node-lru-cache · GitHub が便利。
Java でいうと Ehcache みたいに使える。ただ、Ehcache はキャッシュアルゴリズムを指定できるが、 lru-cache は LRU(Least Recently Used)という名の通り、最近のもっとも使われていないデータを最初に捨てるアルゴリズム専用。

インストール

npm install lru-cache

初期設定

var LRU = require("lru-cache");
var options = {
  max: 500, //キャッシュの最大件数
  maxAge: 24 * 60 * 60 * 1000 //保存期間の指定、単位はミリ秒
}
var cache = LRU(options);

使い方

保存

var key = 'user_100';
var value = {
  user_id: 'user_100',
  name: 'ユーザー100',
  parameter: {
    attack: 300,
    defense: 100,
  },
  time : {
    create: '2014-09-05T00:00:00.000Z',
    update: '2014-09-05T09:30:00.000Z'
  }
};
cache.set(key, value);

value にはアプリケーション側で使ってる object をそのまま格納してしまえばいい。

取得

var user = cache.get('user_100');
console.log(user.name); //'ユーザー100'
console.log(user.time.update); //''2014-09-05T09:30:00.000Z'

get(key) で取得した場合は、内部的に "recently used" がマークされ、LRU アルゴリズムが適用される。 LRU が不要な場合は、peek(key) で取得すれば良い。

その他

cache.has(key); //存在チェック
cache.del(key); //削除
cache.reset(); //全削除
cache.keys(); //キーの配列を取得
cache.values(); //値の配列を取得
cache.forEach(function(value, key, cache) {
  console.log(value.name); //イテレート処理
);