2010-07-21 56 views
5

Tengo una aplicación web ASP.Net 4.0 que con mucha frecuencia carga datos de la base de datos y hace cálculos pesados ​​sobre ella. Quiero almacenar en caché estos datos cargados y preparados en un caché central al que pueden acceder todos los usuarios y equipos que usan la aplicación.ASP.Net Almacenamiento en memoria caché

simple caso de uso:

  • Usuario 1 accede a la página web, caché está vacío, se carga de datos/calculados, los datos se almacenan en caché
  • Usuario 2 accede a la página web, caché contiene datos, los datos cargados desde la memoria caché
  • usuario 3 accede a la página web, caché contiene datos, los datos cargados desde la memoria caché
  • usuario 1 recargas página web, caché contiene datos, los datos cargados desde la memoria caché
  • cache expira
  • Usuario 3 refresca la página web, caché está vacía, los datos se cargan/calculados, los datos se almacenan en caché

sé que ASP.Net tiene incorporado un mecanismo de caché. Lo que no sé es si se puede compartir entre diferentes usuarios que acceden al sitio en una computadora diferente al mismo tiempo. También me gustaría saber cómo se comporta el sistema en un entorno de granja de servidores web.

Respuesta

9

Mientras que otros han mencionado el construido en el Cache de ASP.NET (System.Web.Caching), tenga en cuenta que .NET 4.0 presenta un marco de almacenamiento en caché totalmente nuevo diseñado para trabajar fuera del espacio de nombres System.Web.Caching:

System.Runtime.Caching

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

Ahora bien, esto es mucho más de una bestia de elemento en caché sencilla del System.Web.Caching. Sin embargo, tiene la ventaja de tener múltiples almacenes de caché, bloquear objetos/claves de caché y los puntos de extensibilidad de crear sus propios proveedores de caché externos, como uno para el nuevo Velocity distributed caching system de Microsoft. Viene con un proveedor de MemoryCache incorporado.

Realmente no es tan difícil de usar. Directamente desde el artículo de MSDN en la incorporada en el proveedor de MemoryCache (de nuevo, puede implementar su propia) usarlo en una aplicación Windows Forms (usted cambia el código de su aplicación 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; 

Implementé NCache (mencionado anteriormente), así como Memcached. Puedo decirles que Velocity de Microsoft es realmente el camino a seguir para particionar los datos y configurar la redundancia dentro de las particiones de caché (muy bueno). Sin mencionar, ¡es gratis!

2

Sí, la caché incorporada de ASP.NET se comparte entre todos los usuarios (subproceso) en la aplicación.

3

Como escribió Eric, puede usar la memoria caché incorporada de ASP.NET para lo que usted quiere: se comparte entre todas las sesiones de su aplicación web.

Si realmente desea (o necesita) tener un caché común para varias máquinas (granja de servidores web), entonces necesitaría alguna solución de almacenamiento en caché distribuida, p. AppFabric, NCache o similar.

Cuestiones relacionadas