ホームページ >ウェブフロントエンド >jsチュートリアル >RedisでMongoDBデータベースをキャッシュします
このチュートリアルは、Redisキャッシングレイヤーを実装してMongoDBデータベースと対話するnode.js Webサービスのパフォーマンスを高める方法を示しています。 概念を説明するために、「ファストライブラリ」アプリケーションを構築します
Redisキャッシングの重要な利点:Redisの高速でメモリ内のストレージに頻繁にアクセスされるデータを保存することにより、読み取りパフォーマンスが大幅に向上します。
「fastLibrary」アプリケーションの構築:
:Mongodbに新しい本のエントリを作成します :タイトルごとに本の内容を取得します。
POST /book
GET /book/:title
を初期化します 依存関係のインストール:
mkdir fastLibrary && cd fastLibrary && npm init
ステップ2:基本的なmongoDB相互作用:npm install express mongodb redis --save
ファイルはExpressサーバーをセットアップし、MongoDBに接続します:
access.js
<code class="language-javascript">module.exports.saveBook = (db, title, author, text, callback) => { db.collection('text').save({ title, author, text }, callback); }; module.exports.findBookByTitle = (db, title, callback) => { db.collection('text').findOne({ title }, (err, doc) => { if (err || !doc) callback(null); else callback(doc.text); }); };</code>
index.js
<code class="language-javascript">// ... (require statements and MongoDB connection as before) ... app.post('/book', (req, res) => { // ... (save book logic as before) ... }); app.get('/book/:title', (req, res) => { // ... (get book logic, updated later with caching) ... }); // ... (app.listen as before) ...</code>:
でRedisクライアントを初期化します
index.js
:<code class="language-javascript">const redis = require('redis').createClient({ url: 'redis://localhost:6379' }); redis.connect().catch(console.error);</code>
access.js
のfindBookByTitleCached
エンドポイントを更新して、<code class="language-javascript">module.exports.findBookByTitleCached = (db, redis, title, callback) => { redis.get(title, (err, reply) => { if (err) callback(null); else if (reply) callback(JSON.parse(reply)); // Cache hit else { // Cache miss db.collection('text').findOne({ title }, (err, doc) => { if (err || !doc) callback(null); else { redis.set(title, JSON.stringify(doc)); // Add to cache callback(doc.text); } }); } }); };</code>
GET /book/:title
ステップ4:Redis LRUの構成:index.js
findBookByTitleCached
LRUが有効になり、メモリ制限(必要に応じて調整)でRedisを開始します:<code class="language-javascript">app.get('/book/:title', (req, res) => { access.findBookByTitleCached(db, redis, req.params.title, (book) => { if (!book) res.status(404).send('Book not found'); else res.send(book); }); });</code>
ステップ5:キャッシュの更新の処理(エンドポイントのパット):
エンドポイントを追加して書籍を更新し、それに応じてキャッシュを更新します。 これには、関数を
に、<code class="language-bash">redis-server --maxmemory 512mb --maxmemory-policy allkeys-lru</code>エンドポイントに
に追加する必要があります。 (実装の詳細は簡潔に省略されていますが、上記のキャッシュロジックと同様)。
パフォーマンスのテストと結論:
キャッシュを実装した後、キャッシュなしのパフォーマンスメトリック(応答時間)を比較して、改善を観察します。 早期最適化は有害である可能性があることを忘れないでください。そのため、キャッシュが必要かつ適切であるかどうかを慎重に評価してください。 読み取り/書き込み比率、クエリの複雑さ、データの一貫性要件などの要因を考慮してください。 提供されたFAQは、これらの考慮事項に関する追加の洞察を提供します
以上がRedisでMongoDBデータベースをキャッシュしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。