>本教程演示瞭如何通過實現REDIS緩存層與MongoDB數據庫進行交互的Node.js Web服務的性能。 我們將構建一個“ fastlibrary”應用程序來說明該概念。
REDIS緩存的 關鍵優點:
理解內存層次結構:> 緩存解決了存儲容量和速度之間的固有權衡。 硬盤驅動器的容量很大,但訪問緩慢,而RAM更快但較小。 CPU寄存器最快,但容量最小。 緩存充當高速中介,將常見的數據存儲在更快的內存中(如RAM)。 下圖說明了以下內容:
> 我們將創建一個具有兩個端點的簡單Web服務:
POST /book
:通過標題檢索書的內容。
GET /book/:title
步驟1:項目設置:創建一個項目目錄並初始化npm:>
>安裝依賴項:mkdir fastLibrary && cd fastLibrary && npm init
npm install express mongodb redis --save
>
文件設置Express Server並連接到MongoDB:
>access.js
>步驟3:集成redis緩存:
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); }); };
index.js
在
// ... (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) ...
修改
index.js
>
const redis = require('redis').createClient({ url: 'redis://localhost:6379' }); redis.connect().catch(console.error);
access.js
的端點以使用findBookByTitleCached
: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); } }); } }); };
GET /book/:title
>
index.js
啟動啟用LRU啟動REDIS和一個內存限制(根據需要進行調整):findBookByTitleCached
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); }); });
>添加一個端點以更新書籍並相應地更新緩存。 這需要將函數添加到和
>>>>>。 (為簡潔而省略了實現細節,但類似於上面的緩存邏輯)。
>性能測試和結論:
實施緩存後,在有沒有緩存的情況下比較性能指標(響應時間)以觀察改進。 請記住,過早的優化可能是有害的,因此請仔細評估緩存是否需要和適合您的應用。 考慮諸如讀/寫比例,查詢複雜性和數據一致性要求之類的因素。 提供的常見問題解答提供了這些注意事項的其他見解。
>以上是用REDIS緩存mongoDB數據庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!