web-dev-qa-db-ja.com

単純なキャッシュのためのノードキャッシュとRedis

データベースの読み取り操作を回避するために、Node.jsアプリケーションでキャッシュを使用することを計画しています。 (毎回データベースから同じデータを読み取るのではなく)少量のデータのみです。各サーバーにローカルキャッシュを配置することを計画しています。 Node Cache( https://www.npmjs.com/package/node-cache )またはRedisを使用する必要がありますか?

どちらが速くて効率的ですか?

11
Ligo George

将来的にアプリケーションのスケーリングを計画している場合は、redisを選択します

これが優れたパフォーマンスを必要とする小さなプロジェクトの場合は、インメモリを使用します。

手始めに、私はインメモリキャッシングを使用することをお勧めしますが、redisを使用するようになった後、このものを簡単にリファクタリングできるように制御メカニズムの反転を使用します。このようなものを試してください:

// cache service

module.exports = (provider) => {
   // provider here is an abstraction of redis or in memory node
   // implement your logic

   const save = (key, item) => {
     provider.save(key, item);
     // return promise callback etc
   }    

   const getItem = (key) => {
      provider.get(key);
   } 

   return {
     save,
     getItem,
   }
}

そして、必要なプロバイダーを使用するだけで、後から簡単にコードをリファクタリングできます。アプリ内のすべてのファイルを変更する必要はありません。

11
Alexandru Olaru

キャッシュするオブジェクトのサイズによって異なりますが、redisのみ、ローカルキャッシュのみ、または両方の組み合わせを使用できます。 Redisは集中型キャッシュ、したがってより高いキャッシュヒット率(1つのWebサーバーがキャッシュを設定するため、他のすべてのWebサーバーが値を使用できるため)などの多くの利点を提供しますが、ノードキャッシュではキャッシュが設定されますサーバーごと、したがってキャッシュヒット率が低くなります。パフォーマンスローカルキャッシュの利点はネットワーク呼び出しを回避している。これは、オブジェクトがそれほど大きくない場合のオーバーヘッドは非常に小さく、redisは、Webでローカルにホストすると、どちらの場合でも優れたパフォーマンスを提供します。サーバーまたは専用の別サーバー。オブジェクトが大きい場合、たとえば数MBの場合、ネットワークホップはお勧めできません。データベースからオブジェクトを取得するか、Redisキャッシュを使用してローカルにキャッシュします。

1
DhruvPathak

Redisは、本格的なキャッシュシステムを構築したい場合に最適です。たとえば、セッションをキャッシュに保持し、将来的に拡張したいとします。ただし、将来的にアプリケーションをスケーリングする場合でも、ノードキャッシュがはるかに役立つ場合があります。たとえば、データベースに保存されているかなり静的な情報があり、サーバーが常にネットワーク呼び出しを行うことを望まない場合などです。ノードキャッシュははるかに高速です。ノードキャッシュまたはその他の内部キャッシュにttlを使用して情報をアップロードできます。これにより、情報をより高速に取得できます。

1