首頁 > web前端 > js教程 > 用REDIS緩存mongoDB數據庫

用REDIS緩存mongoDB數據庫

Jennifer Aniston
發布: 2025-02-19 13:00:15
原創
968 人瀏覽過

>本教程演示瞭如何通過實現REDIS緩存層與MongoDB數據庫進行交互的Node.js Web服務的性能。 我們將構建一個“ fastlibrary”應用程序來說明該概念。

REDIS緩存的

關鍵優點:>

    通過將經常訪問的數據存儲在Redis快速的內存存儲中,可以顯著提高讀取性能。
  • >
  • >減少MongoDB數據庫上的負載,從而防止在數據尺度上進行性能瓶頸。
  • REDIS的LRU(最近使用的最不使用)緩存驅逐策略自動管理內存使用量。

理解內存層次結構:> 緩存解決了存儲容量和速度之間的固有權衡。 硬盤驅動器的容量很大,但訪問緩慢,而RAM更快但較小。 CPU寄存器最快,但容量最小。 緩存充當高速中介,將常見的數據存儲在更快的內存中(如RAM)。 下圖說明了以下內容:

Caching a MongoDB Database with Redis

>構建“ fastlibrary”應用程序:

> 我們將創建一個具有兩個端點的簡單Web服務:

    :在Mongodb中創建一個新書條目。
  • POST /book:通過標題檢索書的內容。
  • GET /book/:title步驟1:項目設置:
  • >

創建一個項目目錄並初始化npm:>

>安裝依賴項:
  1. mkdir fastLibrary && cd fastLibrary && npm init
  2. >
  3. 步驟2:基本mongodb互動: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

中初始化redis客戶端:
// ... (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) ...
登入後複製
>

修改
    添加
  1. index.js>
const redis = require('redis').createClient({ url: 'redis://localhost:6379' });
redis.connect().catch(console.error);
登入後複製
    更新
  1. > access.js的端點以使用findBookByTitleCached
  2. >
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);
                }
            });
        }
    });
};
登入後複製
    >
  1. 步驟4:配置redis lru:GET /book/:title> index.js啟動啟用LRU啟動REDIS和一個內存限制(根據需要進行調整):> findBookByTitleCached
步驟5:處理緩存更新(put端點):
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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板