2010-07-21 47 views
5

Tôi có một ứng dụng web ASP.Net 4.0 rất thường xuyên tải dữ liệu từ cơ sở dữ liệu và thực hiện các phép tính nặng trên đó. Tôi muốn lưu trữ dữ liệu được tải và chuẩn bị này trong bộ nhớ đệm trung tâm có thể được mọi người dùng và máy tính sử dụng ứng dụng truy cập.Chia sẻ Cache ASP.Net

Simple use-case:

  • User 1 truy cập trang web, bộ nhớ cache là trống rỗng, dữ liệu được nạp/tính, dữ liệu được lưu trữ
  • User 2 truy cập trang web, bộ nhớ cache chứa dữ liệu, dữ liệu được nạp từ bộ nhớ cache
  • User 3 truy cập trang web, bộ nhớ cache chứa dữ liệu, dữ liệu được nạp từ bộ nhớ cache
  • User 1 load lại trang web, bộ nhớ cache chứa dữ liệu, dữ liệu được nạp từ bộ nhớ cache
  • cache hết hạn
  • User 3 làm mới trang web, bộ nhớ cache là trống rỗng, dữ liệu được nạp/tính, dữ liệu được lưu trữ

Tôi biết rằng ASP.Net đã tích hợp sẵn trong cơ chế bộ nhớ cache. Những gì tôi không biết là liệu nó có thể được chia sẻ giữa những người dùng khác nhau truy cập vào trang web trên máy tính khác nhau cùng một lúc hay không. Tôi cũng muốn biết hệ thống hoạt động như thế nào trong môi trường trang trại.

Trả lời

9

khi những người khác đã đề cập đến việc xây dựng trong ASP.NET Cache (System.Web.Caching), xin lưu ý rằng NET 4.0 giới thiệu cả một khung bộ nhớ đệm mới được thiết kế để làm việc ngoài không gian tên System.Web.Caching:

System.Runtime.Caching

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

Bây giờ, đây là nhiều hơn nữa của một con thú hơn mục bộ nhớ cache của System.Web.Caching đơn giản của. Tuy nhiên, bạn có được lợi thế là có nhiều kho lưu trữ bộ nhớ cache, khóa các đối tượng/khóa bộ nhớ cache và các điểm mở rộng của việc tạo các nhà cung cấp bộ nhớ cache bên ngoài của riêng bạn - chẳng hạn như một cho Velocity distributed caching system mới của Microsoft. Nó đi kèm với một nhà cung cấp MemoryCache được xây dựng trong.

Thực sự không khó sử dụng. Thẳng từ bài viết MSDN về built-in cung cấp MemoryCache (một lần nữa, bạn có thể thực hiện riêng bạn) sử dụng nó trong một ứng dụng WinForms (bạn muốn thay đổi mã cho ứng dụng web của bạn):

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; 

Tôi đã triển khai NCache (đã đề cập ở trên), cũng như Memcached. Tôi có thể nói với bạn rằng vận tốc của Microsoft thực sự là cách để phân vùng dữ liệu và thiết lập dự phòng trong chính phân vùng bộ nhớ cache (rất hay). Chưa kể, nó hoàn toàn miễn phí!

2

Có, bộ nhớ đệm trong ASP.NET được chia sẻ giữa tất cả người dùng (luồng) trong ứng dụng.

3

Như Eric đã viết, bạn có thể sử dụng bộ đệm ẩn của ASP.NET cho những gì bạn làm - nó được chia sẻ giữa tất cả các phiên của ứng dụng web của bạn.

Nếu bạn thực sự muốn (hoặc cần) có bộ nhớ cache chung cho nhiều máy (trang trại), thì bạn cần một số giải pháp bộ nhớ đệm được phân phối, ví dụ: AppFabric, NCache hoặc tương tự.

Các vấn đề liên quan