2010-07-21 24 views
5

Veritabanından çok sık veri yükleyen ve üzerinde yoğun hesaplamalar yapan bir ASP.Net 4.0 web uygulamasına sahibim. Yüklenen ve hazırlanmış bu verileri, uygulamayı kullanan her kullanıcı ve bilgisayar tarafından erişilebilen merkezi bir önbellekte önbelleğe almak istiyorum.ASP.Net Önbellek paylaşımı

Basit kullanım-case:

  • Kullanıcı 1 önbellek önbellekten
  • yüklenen veriler, verileri içeren, veri yüklendiğinde/hesaplanmış veri
  • Kullanıcı 2 web sayfasını erişir önbelleğe web sayfası, önbellek boş erişir
  • Kullanıcı 3 web sayfası, önbellek web sayfası, önbellek verileri, verileri içeren 1 reloads önbellekten yüklenen Kullanıcı
  • önbellekten yüklenen veriler, verileri içeren kere
  • Önbellek
  • sona
  • Kullanıcı 3 önbellek boştur, web sayfasını yeniler, veri hesaplanan/yüklenir, veri Ben ASP.Net sahip olduğunu biliyoruz

önbelleğe yerleşik bir önbellek mekanizması. Bilmediğim, siteye farklı bilgisayarlarda aynı anda erişen farklı kullanıcılar arasında paylaşılıp paylaşılamayacağı. Ayrıca sistemin bir web grubu ortamında nasıl davrandığını bilmek isterim.

cevap

9

Diğerleri de söylediğim iken ASP.NET Cache (System.Web.Caching) yılında inşa .NET 4.0 System.Web.Caching ad alanının dışında çalışmak üzere tasarlanmış yepyeni bir önbelleğe alma çerçevesini soktuğuna dikkat ediniz:

Şimdi

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

System.Runtime.Caching

, bu basit System.Web.Caching en Önbellek öğesinden daha canavarın çok daha fazla. Ancak, Microsoft'un yeni Velocity distributed caching system için olduğu gibi, birden çok önbellek deposuna sahip olmanız, önbellek nesnelerinin/anahtarlarının kilitlenmesi ve kendi harici önbellek sağlayıcınızın oluşturulma genişletme noktalarına sahip olmanız avantaj sağlar. Yerleşik bir MemoryCache sağlayıcısı ile birlikte gelir.

Gerçekten kullanımı zor değil. Düz üzerinde MSDN'ın makalesinden yerleşik MemoryCache sağlayıcısına (yine kendi uygulayabileceğiniz) WinForms uygulamasında kullanmaktan (web uygulaması için kodunu değiştirmek istiyorum):

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; 

Niyetim (yukarıda belirtilen), yanı sıra Memcached uyguladım. Microsoft’un Velocity’in, verileri bölümlemek ve önbellek bölümlerinin kendisinde (çok havalı) yedeklemeyi kurmak için gerçekten bir yol olduğunu söyleyebilirim. Söz değil, ücretsiz!

2

Evet, yerleşik ASP.NET önbelleği uygulamadaki tüm kullanıcılar (iş parçacığı) arasında paylaşılır.

3

Eric'in yazdığı gibi, ASP.NET'in yerleşik önbelleğini ne yaptığınız için kullanabilirsiniz; bu, web uygulamanızın tüm oturumları arasında paylaşılır.

Çok sayıda makine için (web grubu) gerçekten bir önbelleğe sahip olmak istiyorsanız (veya gerekirse), bazı dağıtılmış önbelleğe alma çözümlerine gereksinim duyarsınız, örn. AppFabric, NCache veya benzeri.

İlgili konular