2011-05-24 145 views
1

似乎這個問題在很多時候都被問過了,但是我沒有看到的問題真的達到了任何普遍的共識或者得到了證實的結論。所以....緩存框架建議

我有一個.NET 3.5應用程序框架,是由以下節點:

  1. 的net.tcp WCF偵聽器服務(OS級服務)
  2. 請求處理框架它位於聽者
  3. 一個SQL包含配置數據2008數據庫下
  4. 一個SQL數據庫2008包含處理的請求的存儲裝置(即在消息數據,消息數據輸出,時間,狀態日誌等)

該框架完全按照要求工作,我得到很好/可接受的響應時間。但是,我需要儘可能降低這些響應時間。其中一個明顯的解決方案是實現對很少更改的配置數據(節點#3)的緩存。

緩存模型的關鍵要求是:他們還沒有被(即滑動過期)使用後的X時間跨度

  • 能力已緩存的對象後到期

    1. 能力有緩存對象過期X時間跨度,不管他們上次使用。
    2. 清除能力,或者完全或選擇性地,所述高速緩存在一個線程安全的方式,因此對可能在明確方法稱爲

    由於框架的時間來查詢高速緩衝存儲器的任何過程不影響不是一個網絡應用程序,System.Web.Caching不能用(這是我讀過的一般建議)。將MS企業框架添加到項目僅用於緩存應用程序塊功能似乎有點矯枉過正(我曾聽說MS現在已經棄用了.NET 4,現在有System.Runtime.Caching)。這是不可行的使用.NET 4,因此System.Runtime.Caching

    然後還有另一個方面要考慮。配置數據來自SQL數據庫,這將執行自己的常用數據緩存。所以這裏可能不需要緩存?這就是說DB和服務駐留在單獨的服務器上,因此緩存在服務器的內存中將消除服務器和數據庫之間網絡通信的開銷。

    所以問題是什麼緩存模型,如果有的話,你會爲此建議嗎?此刻,我傾向於寫我自己的,但是如果這是可以避免的,我就會全神貫注。

    編輯

    看MS企業庫後多一點看來,這可能是一個可行的解決方案。它符合大部分要求,不會過於複雜。今天下午,我打算做一些線程測試,以確保它按預期工作。但我確實有這樣的問題:這個圖書館的生產是否已經準備好,還是更多的是技術示範?

  • 回答

    1

    如果你在一臺服務器上,那麼我會去MS企業庫緩存塊。它在產品環境中工作正常。如果你進入多個服務器,那麼我會轉向類似memcached的東西。

    +0

    有多臺服務器,所以我考慮過Memcache - 但是如果我有單個memcache服務器,將有網絡流量來獲取/設置緩存項目,所以我可能還需要依靠SQL本身的緩存。很高興在這一次被證明是錯誤的。 – MrEyes 2011-05-24 15:11:48

    +0

    @MeEyes - 你在那裏可能是正確的。我正在考慮更多的東西來緩存比靜態數據集計算量更大的東西,以及1服務器可能需要更新其他服務器會立即需要知道的東西。因爲它聽起來像你會緩存基本上靜態的數據,保持在每個服務器上的內存聽起來像一個好主意。我甚至使用過Oracle的連續通知功能來通知我的應用程序,如果表發生變化,所以應用程序會知道自動重新加載一些數據(如果您碰巧使用Oracle)。 – CodingWithSpike 2011-05-24 17:01:55

    +0

    我會說,對於數據類型來說,它聽起來像OP想緩存EL緩存塊是合適的,即使對於多個服務器也是如此。如果兩個服務器實例都緩存相同的數據,那麼也可以。是的,如果高速緩存擴展到包含昂貴的資源(例如高計算或檢索成本),那麼可以考慮像memcached這樣的解決方案來緩存所有服務器的結果。但是對於你最初問到的問題,你可以在每臺服務器上使用EL緩存塊來節省開支。 – JMD 2013-07-18 14:37:58