Node.jsにメモリキャッシュ導入で高速化…一番優秀なモジュール

Node.jsでメモリキャッシュを使いたいです。

▼ メモリキャッシュが必要になる場面

  • アクセスの多いデータをキャッシュしたい
  • MySQLのクエリ結果をキャッシュしたい
  • 少しでもNode.jsを高速に動作させたい

主に高速化と負荷軽減のためです。

そのために色々モジュールなど試したので、
Node.jsでのメモリキャッシュをまとめました。

メモリキャッシュ系モジュールは種類が豊富

最初に迷ったのがどのモジュールを選ぶか。

意外と選択肢が多いから迷います。

▼ 把握してるだけでも3つある

選択肢が多いから何を選ぶべきなのか、
どれが一番いいのかを決めるのが難しいです。

だから色々使って試してみました。

一番優秀なのはnode-cacheモジュール

結論としては次のライブラリが一番良かったです。

▼ node-cache

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

▼ 良かったと思った理由

  • キー => 値でキャッシュするシンプルさ
  • 配列/オブジェクトもキャッシュできる
  • 個別にTTL(有効期限)が指定できる
  • キャッシュの最大上限数を指定できる
  • 削除時のイベントトリガーにも対応してる

挙げてけばキリがないけど以上の点。

AWSとかの環境ではメモリが有限であるため、キャッシュの最大上限数が指定できるのは大きいです。この機能が他モジュールにはなかった…

ということでnode-cahceに決定。

プロジェクトにnode-cacheをインストール

ではnode-cacheをnpmからインストールします。

ライセンスもMITライセンスなので安心です。

早速データのメモリキャッシュを試してみる

それでは適当にメモリキャッシュしてみます。

※ Node.js + Express の場合

▼ 基本的なメモリキャッシュのやり方

何をしてるかはコメントを見れば分かります。

先ほど書いたように KEY => VALUE のようにシンプルな形式であり、値・オブジェクト・配列などをキャッシュできます。TTLは秒単位の有効期限で、それが過ぎるとメモリから自動削除されます。

キャッシュキーが存在しないなら nodeCache.get(key)  の返り値は undefined  になるため、 nodeCache.set(key,value,ttl)  でキャッシュ設定すればOKです。

とても単純明快で使いやすい。

メモリキャッシュの最大上限数も設定可能

個人的に便利だなと思うのがこの機能

メモリキャッシュの最大上限数の制限

例えば最大数を10000個にしたいとします。

▼ NodeCache生成時に指定するコード例

上記コードみたいにNodeCacheにはオプションとして maxKeys  が渡せます。これはEC2みたいなメモリが限られる環境なんかで役立ちますね。

ただし最大上限数を越えると「Cache max keys amount exceeded...」のようなエラーが出るため、キャッシュ設定時は例外処理するべきです。

それ以外は注意点はありません。

メモリ消費量を把握することもできる

今どのくらいメモリを消費してるのかな?

というメモリ情報も取得することが可能です。

▼ メモリ情報取得のコード例

▼ 上記の例ならこういう結果が表示される

メモリ使用量が一目で見れるから便利です。

以上、Node.jsにメモリキャッシュ導入でした。

高速化・処理速度アップにつながります。

Node.js高速化に役立つ関連記事

最後にNode.jsの高速化の関連記事の紹介です。

▼ Node.jsでのgzip圧縮配信を有効にする手順【転送量削減】

もしかしたら役立つかもしれません。

必要になったらご覧ください。