node.js アプリケーション上で、メモリキャッシュを使いたい場合、いくつかのライブラリが存在する。

memory-cache

Github: https://github.com/ptarjan/node-cache

npm install memory-cache

すごくシンプルに実装されている。どこから require('memory-cache') をしても、その中の情報は共有される実装。

node-cache

Github: https://github.com/tcs-de/nodecache

npm install node-cache

memory-cache の Github レポジトリは node-cache で、こちらは nodecache という名前で管理されている。ややこしい。CoffeScript で書かれている。memory-cache に比べると高機能で、require('node-cache') では、データがオブジェクトに閉じ込められているため、複数のメモリ空間を別々に定義することができる。

get は、コールバックで取得する必要があったりする。

lru-cache

Github: https://github.com/isaacs/node-lru-cache

npm install lru-cache

LRU (Least Recently Used) 方式でキャッシュを管理できるライブラリ。つまり、予め利用件数を定めておいて、使われない情報を削除することができる。メモリ容量を管理したい場合は必要そうなライブラリ。

こちらも、node-cache と同様に、複数の空間を管理することができそうだ。

早さとかを比べてみる

1,000,000 回の get/set を行った結果

  • memory-cache: 1,071 ms
  • node-cache: 269,424 ms
  • lru-cache: 4,731ms

node-cache は高機能なだけあって、遅い気がしますねー。。。(計測の仕方がダメだった可能性もあるけど、1件の状態でも10ms 以上かかってしまっている。) //TODO: 個人的には、lru-cache の set() に、キャッシュごとに expire を定められたら使えるなーと思ったりしました。

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>