
312
9
章 特殊な問題を解決するためのパターン
処理と比較して実行時間が
10%
減少したはずです。もちろんこれは多くの要因(受信したリクエスト数、
リクエスト間の時間間隔など)に依存します。バッチ処理に対するキャッシュ処理の利点は、リクエス
トの頻度が高くそれが長時間続く場合により重要になります。
関数呼び出しの結果をキャッシュしておくことを「メモ化(
memoization
)」と呼びます。
npm
では、多くのパッケージが非同期メモ化を実装しています。よくできたパッケージ
のひとつが
memoizee
(
https://npmjs.org/package/memoizee
)です。
9.2.3.2
キャッシュ処理機構の実装について
実社会のアプリケーションでは、より高度なキャッシュの無効化技法と保存メカニズムを使わねばな
らないかもしれません。それが必要になるのは次の理由からです。
●
大量の値がキャッシュされると、消費するメモリがふくれあがる。その場合、
LRU
(
Least
Recently Used
)アルゴリズムを用いればメモリ使用量を一定に維持できる
●
アプリケーションが複数のプロセスに分散している場合、キャッシュに単なる変数を使うと各
サーバのインスタンスから返される結果が異なる恐れがある。それが
望ましくなければ、キャッ
シュに共有領域を使うことができる。よく使われるのが
Redis
(
http://redis.io
)と
Memcached
(
http://memcached.org
)
●
キャッシュを時間