キャッシュアプリケーション



キャッシュアプリケーションWhat is caching?ネットワーク上に何かをフェッチするのは、低速で高価です.大きなレスポンスはクライアントとサーバーの間で多くの往復を必要とします.そして、それは彼らが利用可能であるとき、そして、ブラウザーが彼らを処理することができるとき、そして、訪問者のためにデータコストを引き起こすとき、遅れます.その結果、以前にフェッチされたリソースをキャッシュして再利用する能力は、パフォーマンスを最適化する重要な局面である
REDISは、データベース、キャッシュ、メッセージブローカーとして使用される、オープンソース(BSDライセンス)です.Redisは常にサーバーのメインメモリのデータを提供し、変更します.インパクトはすぐに必要なデータを取得するシステムです.REDISは、リレーショナルデータベースやNOSQLからロードレイテンシを減らすために、メモリキャッシュに優れたメモリを作成することで、ロードパフォーマンスを向上させ、向上させる働きをします.REDISを使用して、我々は、セットを使用してキャッシュを格納することができますし、Redisはまた、リスト、セット、順序のデータ構造などのような複雑なタイプのデータで動作することができます.

インストール
Redisをインストールすることはかなり前向きです.あなたは、インストールのためにlinkをチェックすることができます
Redisクライアントをnodejsに追加するには、単に
npm i redis
簡単のために、私たちはExpressアプリで外部APIからいくつかのデータを取得しているこの例を使用します
const express = require('express');
const responseTime = require('response-time')

//Load Express Framework
var app = express();

//Create a middleware that adds a X-Response-Time header to responses.
app.use(responseTime());

const axios = require('axios')


async getDogs(req,res) {
  try {
    const dogs = await axios.get('https://dog.ceo/api/breeds/list/all');
    res.send(dogs);
  } catch (error) {
    console.error(error)
    res.send('Something went wrong!!!');
  }
}

app.get('/dogs', getDogs);

app.listen(3000, function() {
  console.log('Your app is running on port 3000 !!!')
});

これは、エンドポイントにredisを置くことなく、犬のAPIからデータを取得する簡単なエクスプレスアプリです.かなり単純
しかし、下向き側は既にデータを取得しており、サーバのデータが変更されない場合、各リクエストにデータを取得する必要はありません
これは同じコードですが、今回はRedisでキャッシュ層を追加しました
const express = require('express');
const responseTime = require('response-time')
const redis = require('redis');
const client = redis.createClient();

//Load Express Framework

var app = express();

//Create a middleware that adds a X-Response-Time header to responses.

app.use(responseTime());

const axios = require('axios')


async getDogs(req,res) {
  try {


  client.get('dogsdata', (err, result) => {
    if (result) {

     res.send(result);

    } else {
      const dogs = await axios.get('https://dog.ceo/api/breeds/list/all');

    // Set the string-key:dogsdata in our cache. With he contents of the cache
    // Set cache expiration to 1 hour (60 minutes)

    client.setex('dogsdata', 3600, JSON.stringify(dogs));
    }

    });

  } catch (error) {
    console.error(error)
    res.send('Something went wrong!!!');
  }
}

app.get('/dogs', getDogs);

app.listen(3000, function() {
  console.log('Your app is running on port 3000 !!!')
});

ここでは最初にタグdogsdataでキャッシュからデータをフェッチします.データがキャッシュに存在する場合、我々はAxiosを介してAPIに要求を行う他のデータを提供します.APIが呼ばれるたびに、キャッシュは最新のデータで更新されます.
REDISがキー値ストアであることを覚えておいてください.この場合、データを取得するキーは、この場合、データを取得するキーに等しくなければなりません
両方の実装を比較すると、キャッシュが99 %近くのリクエストで要求される時間を短縮することがわかります
Githubで私について来てください:www.github.com/rubiin