2015-02-08 64 views
2

我Node.js的API運行一些昂貴的「組」對MongoDB的使用,例如查詢:添加緩存到node.js MongoDB API?

app.get('/group/:collection', function(req, res) { 
    [...] 
    db.collection("indicators").group(keys, conds, { value : 0 } [...] 

什麼是一些比較容易實現在此緩存解決方案?

+1

你是什麼意思的「解決方案」呢?你在找一些現成的圖書館嗎?在這種情況下,這是**脫離主題**,因爲你正在尋找圖書館的建議。如果你正在尋找*方法來實現緩存自己*,這是一個相當廣泛的問題**,這個問題的答案很簡單:「將結果存儲在某種對象中,並解決通常在其他地方描述的緩存挑戰互聯網和太複雜,在這裏詳細討論。「 – mnemosyn 2015-02-08 23:30:13

+0

我建議你使用LRU緩存,已經有一個很好用的節點模塊,你可能想看看這裏: https://github.com/isaacs/node-lru-cache – 2015-02-10 10:08:10

+0

您需要的解決方案取決於您的實施。如果您的應用程序目前正在運行,並且將在可預見的未來運行,那麼在單臺計算機(有時稱爲dyno)上運行,那麼內存緩存對您來說可以。內存緩存很容易設置。您可以使用節點緩存,lru緩存或npmjs.com上可用的其他任何其他緩存。但是,如果您的應用程序從多個dynos運行,那麼您需要分佈式緩存,所有dynos都可以共享,例如redis。如果你想要兩種緩存類型的組合,你可以看看npmjs.com上的分層解決方案,例如cache-service(免責聲明:我寫了cache-service)。 – jpodwys 2015-06-03 18:45:25

回答

1

Redis的是非常容易實現的

  1. Install redis

  2. 安裝Redis的節點模塊

    npm install redis --save 
    
  3. 創建一個緩存服務。這是最難的部分,但總體流程看起來像這樣:

    1. 請求緩存服務。
    2. 緩存服務根據查詢檢查緩存對象的redis。
    3. 緩存從redis返回數據(如果存在的話)或者如果它不存在,則從mongo返回數據。
    4. 如果數據在redis中尚未存在或已過期,則緩存服務會將數據寫入redis。

做出奇的好,在高速緩存的頂部,Redis的提供了處理隊列,發佈/訂閱消息,列表管理一些驚人的功能...