2010-08-15 30 views
0

使用HttpCache從Web服務緩衝數據可能會遇到什麼問題,而不是將相同的數據存儲在數據庫表中?在服務暫時不可用的假設情況下,如果服務器在此期間需要重新啓動,則無法重新填充緩存。那麼出於這個原因,是否可以像使用SqlServer會話狀態一樣持久保存緩存?使用ASP.NET HttpCache緩衝來自Web服務的數據

我讀的HttpCache是​​使用Singleton模式實現的。這是否意味着在使用來自緩存的對象時應該使用Mutex?

如果緩存一方面被單獨的線程更新,另一方面被另一線程讀取,會發生什麼?

謝謝。

回答

2

緩存機制遇到的最大問題是陳舊的數據。由於數據被緩存,所以它可以與緩存生存期一樣久。在交易系統中,這是不可接受的,但是對於其他系統來說,這很好。只要瞭解數據的年齡。我不知道緩存是否可以持久化,但如果你想要去數據庫這樣做,我建議不要首先使用緩存,因爲部分內容是快速內存訪問到你的數據。

是的,高速緩存使用像Singleton這樣的集中式內存存儲。你對Mutexes的問題的答案是它取決於你的數據訪問模式。大多數人使用緩存填充數據一次。如果該值超時,則緩存將它們的條目設爲空,並重新填充。是的,您可以使用Mutex(或更可能是lock聲明)來保護訪問,以防止多個客戶端競相一次填充緩存。但海事組織更像是一個性能點而不是數據一致性點,因爲很可能客戶將用相同的數據重寫另一個數據(同樣,這取決於您的情況)。

+0

我寧可不使用緩存,但代碼已經寫好。有一個單獨的線程在後臺運行,每5分鐘左右重新填充一次緩存。這是一個每月有40-100k人訪問的網站。我試圖確定它是否能夠很好地擴展,如果線程/緩存可能會導致任何問題。 – user23048345 2010-08-15 13:56:16

+0

我想這取決於有多少臺計算機正在嘗試更新其緩存(如果這是場方案)。您將遇到的問題取決於緩存重新填充的方式。不幸的是,關於如何實施的深刻和骯髒的細節非常重要。 – 2010-08-15 14:25:33