簡體   English   中英

ASP.Net緩存共享

[英]ASP.Net Cache sharing

我有一個ASP.Net 4.0 Web應用程序,它經常從數據庫加載數據並對其進行繁重的計算。 我想將這些已加載和准備好的數據緩存在中央緩存中,每個使用該應用程序的用戶和計算機都可以訪問該緩存。

簡單的用例:

  • 用戶1訪問網頁,緩存為空,數據被加載/計算,數據被緩存
  • 用戶2訪問網頁,緩存包含數據,從緩存加載的數據
  • 用戶3訪問網頁,緩存包含數據,從緩存加載的數據
  • 用戶1重新加載網頁,緩存包含數據,從緩存加載的數據
  • 緩存過期
  • 用戶3刷新網頁,緩存為空,加載/計算數據,緩存數據

我知道ASP.Net有一個內置的緩存機制。 我不知道的是它是否可以在同一時間訪問不同計算機上的站點的不同用戶之間共享。 我還想知道系統在Web場環境中的行為方式。

雖然其他人已經提到了內置的ASP.NET緩存(System.Web.Caching),但請注意.NET 4.0引入了一個全新的緩存框架,旨在在System.Web.Caching命名空間之外工作:

System.Runtime.Caching

http://msdn.microsoft.com/en-us/library/system.runtime.caching(VS.100).aspx

現在,這比簡單的System.Web.Caching的Cache項更像是野獸。 但是,您可以獲得多個緩存存儲,鎖定緩存對象/密鑰以及創建自己的外部緩存提供程序的可擴展性的優勢 - 例如Microsoft的新Velocity分布式緩存系統 它內置了一個MemoryCache提供程序。

這真的不是那么難以使用。 直接來自MSDN關於內置MemoryCache提供程序的文章(同樣,您可以實現自己的)在WinForms應用程序中使用它(您將更改Web應用程序的代碼):

http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

ObjectCache cache = MemoryCache.Default;
string fileContents = cache["filecontents"] as string;

if (fileContents == null)
{
    CacheItemPolicy policy = new CacheItemPolicy();

    List<string> filePaths = new List<string>();
    filePaths.Add("c:\\cache\\example.txt");

    policy.ChangeMonitors.Add(new 
    HostFileChangeMonitor(filePaths));

    // Fetch the file contents.
    fileContents = 
        File.ReadAllText("c:\\cache\\example.txt");

    cache.Set("filecontents", fileContents, policy);
}

Label1.Text = fileContents;

我已經實現了NCache(如上所述),以及Memcached。 我可以告訴你,微軟的Velocity實際上是分區數據和在緩存分區內設置冗余的方式(非常酷)。 更不用說,它是免費的!

正如Eric所寫,您可以使用ASP.NET的內置緩存來實現您的目標 - 它在您的Web應用程序的所有會話之間共享。

如果您真的想(或需要)為多台計算機(Web場)提供公共緩存,那么您需要一些分布式緩存解決方案,例如AppFabricNCache或類似的。

是的,內置的ASP.NET緩存在應用程序中的所有用戶(線程)之間共享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM