2011-12-05 49 views
1

在我的Azure角色中,我有很多必須存儲在SQL Azure數據庫中的實體。目前,每當我需要讀取實體時,我只是運行一個SQL Azure查詢。如何在Azure角色中緩存數據庫讀取?

我懷疑它很快就會成爲一個瓶頸,所以我不得不實施某種緩存 - 一些內存結構在首次訪問時讀取數據,然後將其存儲一段時間,並在隨後的讀取中返回緩存數據。制定這樣的結構不應該很難,我敢肯定我可以找到可用的代碼。

問題是如何處理來自多個實例的寫入操作?例如,實例1讀取數據並將其緩存,實例2更改數據庫。除非實例1知道它必須重新讀取數據庫並且實際重新讀取數據庫,否則它會使用錯誤的數據。我不知道如何輕鬆做到這一點。

有沒有簡單的方法來保持不同實例的緩存一致?

回答

4

這是分佈式緩存comee發揮作用,並且在Azure上這通常意味着Windows Azure AppFabric Caching

分佈式緩存背後的想法是,緩存是集中式的,並在數臺服務器可能分佈(效率),這樣一數據請求不一定要到數據庫,而數據庫在性能方面通常相對昂貴,但同樣,數據不必在每個進程中本地緩存。

雖然顯然效率不高的進程內緩存,分佈式緩存有幾個好處 -

  1. 它並防止底層源
  2. 與緩存進程外(和,實際上多次調用,在不同的服務器上)減少了對本地內存的壓力
  3. 客戶端從彼此的獲取中獲益 - 即,如果一個客戶端將數據帶入緩存,安全設置允許,其他客戶端現在可以訪問此信息,因此緩存的利用率可以更大

這也意味着具有「真相」更新知識的客戶端可以更新緩存或實際上使其無效,這將立即使共享相同緩存的所有其他客戶端受益。

另外 - 作爲一個分佈式模型 - 緩存服務器場可以擴展以滿足許多請求,儘管在Azure上 - 由於緩存作爲服務提供,這是平臺處理的東西而不是所有者,它是PaaS和Windows Azure的一大優點 信息緩存

1

您可以使用AppFabric緩存,因爲Yossi說,但您也可以使用Memcached

1

如果您要使用Azure AppFabric緩存並且希望數據保持一致,則可能需要關閉本地緩存。

不利的一面是,如果每次請求從緩存中提取多個項目,這將成爲一個主要瓶頸。您可以嘗試通過將緩存的對象組合成一個大對象來解決此問題。

posted a question在微軟論壇上涉及到這一點,現在的答案是陳舊的數據只是需要本地緩存的生活環境。

請注意,如果需要本地緩存並且您正在使用Web角色,則普通的舊式ASP.Net緩存可能是更好的選擇,並且不會單獨收費。

相關問題