[サーバパフォーマンス向上ストレージ2]キャッシュとRedisの理解
通常、要求応答時にデータベースにアクセスするのに最も時間がかかります.そして現在進行中のプロジェクトはWEB-WAS-DBの三層構造です.ユーザーの増加がデータベースに影響を及ぼすことを防止するために、キャッシュを使用してサーバのパフォーマンスを改善しようとしました.
キャッシュとは、データまたは値が予めコピーされた一時的な場所を指す. キャッシュは、通常メモリが使用されるため、かなり高速です. データをキャッシュにプリコピーし、計算やアクセス時間を必要とせずにデータに迅速にアクセスします. 、すなわち、結果は予め保存され、その後、要求が受信されると、データベースにアクセスせず、要求はキャッシュに処理される. という有用なキャッシュにも欠点があるそうです.キャッシュ・サーバは主にメモリを使用して高速化されるため、サーバに障害が発生するとメモリが失われ、データが失われる可能性があります.したがって、ディスクがディスクを使用するように構成されたり、差別のないキャッシュを使用するように構成されたりすることは避ける必要があります.
リモート・ディレクトリ・サーバは、「キー値」構造を有する非構造化データを格納および管理するためのオープン・ソース・ベースの非関係型データベース管理システムです. は、全てのデータをメモリにロードして処理するメモリベースのDBMSである. Redisがサポートするデータ構造 String List Set Sorted Set Hashes
RedisはHomebrewを使用してMacにインストールできます.
Redisサーバをローカルで起動するには、次のコマンドを実行します.
redis依存性を設定してredisに接続します.
server.js
回答所要時間は0.4秒であった.では、同じリクエストを受信したらキャッシュに戻ります.まず、要求が「/写真」である場合、Redisサーバにデータがキャッシュされているかどうかを「checkCache」ミドルウェアで検証する. RedisClientオブジェクトのgetメソッドは、第1のパラメータでキー値を受信し、第2のパラメータでコールバック関数を渡す. の場合は、「/写真」として保存されている値があるかどうかを確認し、キャッシュ値がある場合はデータを表示します. 修正が完了したら、Redisサーバを実行してからリクエストを送信するのを忘れないでください.
同じ要求が繰り返し送信される場合、応答時間は0.03秒である.最初のリクエストに比べて、進歩が速いことがわかります.
こうしてRedisでキャッシュを利用したこれらのリソースを活用することで、アプリケーションの速度とパフォーマンスを大幅に向上させることができます.適切なapiに適用した後、サーバ負荷テストを再実行して、より高いパフォーマンスを体験する必要があります.
リファレンス
Cache
Redis
Redis設定
Redisインストール(Mac)
RedisはHomebrewを使用してMacにインストールできます.
brew install redis
Redis起動
Redisサーバをローカルで起動するには、次のコマンドを実行します.
redis-server
NodeJSプロジェクトの設定
インストールの依存関係
redis依存性を設定してredisに接続します.
npm install redis
作成したサーバをRedisサーバに接続
server.js
const express = require('express');
const redis = require('redis'); // Redis 모듈 불러오기
const axios = require('axios');
const bodyParser = require('body-parser');
const redisClient = redis.createClient();
// ...
createClient()メソッドは、RedisサーバとExpressサーバが同じホスト上で実行されている場合、createClient()を設定する必要がない新しいRedisClientオブジェクトを生成します.ホストが異なる場合は、ホストurl、ポート番号などの設定を追加する必要があります.//...
app.get('/photos', async(req, res) => {
const albumId = req.query.albumId
const {data} = await axios.get(
'https://jsonplaceholder.typicode.com/photos',
{params : {albumId}},
)
res.json(data)
})
//...
Json apiのウェブサイトをテストしてデータの大きい「/写真」の送信を要求します.回答所要時間は0.4秒であった.では、同じリクエストを受信したらキャッシュに戻ります.
//...
// 캐시 체크를 위한 미들웨어
checkCache = (req, res, next) => {
redisClient.get(req.url, (err, data) => {
if (err) {
console.log(err);
res.status(500).send(err);
}
// Redis에 저장된게 존재한다.
if (data != null) {
res.send(data);
} else {
// Redis에 저장된게 없기 때문에 다음 로직 실행
next();
}
});
};
app.get('/photos', checkCache, async (req, res) => {
try {
console.log(req.url)
const {data} = await axios.get('https://jsonplaceholder.typicode.com/photos');
await redisClient.setex(req.url, 1440, JSON.stringify(data));
return res.json(data);
} catch (error) {
console.error(error);
return res.status(500).json(error);
}
});
//...
同じ要求が繰り返し送信される場合、応答時間は0.03秒である.最初のリクエストに比べて、進歩が速いことがわかります.
こうしてRedisでキャッシュを利用したこれらのリソースを活用することで、アプリケーションの速度とパフォーマンスを大幅に向上させることができます.適切なapiに適用した後、サーバ負荷テストを再実行して、より高いパフォーマンスを体験する必要があります.
リファレンス
https://redis.io/docs/about/
https://ko.wikipedia.org/wiki/%EC%BA%90%EC%8B%9C
https://sabarada.tistory.com/103
https://brunch.co.kr/@jehovah/20
https://charming-kyu.tistory.com/37
Reference
この問題について([サーバパフォーマンス向上ストレージ2]キャッシュとRedisの理解), 我々は、より多くの情報をここで見つけました
https://velog.io/@onady/서버-성능-개선-스토리-2-캐시와-Redis-알아보기
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
Reference
この問題について([サーバパフォーマンス向上ストレージ2]キャッシュとRedisの理解), 我々は、より多くの情報をここで見つけました https://velog.io/@onady/서버-성능-개선-스토리-2-캐시와-Redis-알아보기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol