2014-04-06 27 views
5

我需要加載幾個不常更改的信息字段,用於驗證用戶可能訪問的路由。MongoDB與Redis的用戶會話?

目前,我查詢的MongoDB,並存儲在Redis的這些領域由'user:' + mongodb_user_objectid鍵入的一個哈希任何特定的狀態信息一起時英寸

用戶登錄然後,我創建了HTTP cookie並儲存會話這個密鑰作爲redis中的一個字符串,並由'sess:' + session_id加密。

如果其中一個驗證字段可能發生更改,不要複製mongodb中的字段並處理更新redis和mongodb?

從沒有使用redis作爲中間人的情況下直接從mongodb讀取和寫入會話信息是否會有顯着的性能差異?

回答

14

不幸的是,一個明確的答案將需要測量使用您的設置,因爲有這麼多的潛在因素。

然而,我的猜測是使用兩個數據存儲勝過任何潛在的優勢,因爲讀應該是快得令人難以置信兩個數據塊的開銷:

  • 由於會話將被經常使用,收集保存如果在MongoDB中有任何可能的話,它可能會保留在RAM中
  • 丟失會話不會很好,但它不是一個災難,所以你可以寫入MongoDB而無需等待日誌提交(它幾乎與Redis的可靠性相同)
  • 在這兩種情況下,大多數時間是(可能)度過了網絡堆棧上,你必須要經過兩個數據塊

因此,概括地說,我看不出有任何理由的Redis會在這種情況下速度要快很多,但是再次表現往往是猜測,特別是當細節未知時。

+1

我完全同意了。測量。回覆。猜測部分 - 儘管我對MongoDB不太感興趣,但Redis的兩個經典用例是會話管理和數據庫加速/緩存。具體而言,由於MongoDB不是內存數據庫,因此在Redis的性能問題上它通常會得到增強(例如http://redislabs.com/blog/the-top-3-game-changing-redis-use-cases: )) –

+1

感謝您的鏈接。這一切都是非常真實的,但正如鏈接指出的那樣,當涉及到*經常修改會話時,redis真的很閃亮,並保持點擊次數,請求次數等最新。這是分離更快和更龐大的操作是有意義的,並確保重複寫入僅轉到RAM。然而,OP沒有說他經常寫作,即使如此,它也必須有很多流量才能成爲一個重要的區別。 – mnemosyn

+0

因此,由於mongodb將整個文檔加載到內存中,如果我只需要在會話中使用用戶的mongodb文檔中的幾個字段,是否會浪費RAM? – paulkon