Me gustaría almacenar en caché mis acciones más pesadas de base de datos en mi sitio asp.net-mvc. En mi investigación he encontrado
- almacenamiento en caché de donas en el blog de Phil
- Filtros de almacenamiento en caché / compresión en el blog de Kazi
- Podcast de Scott Hansleman sobre cómo almacenaron en caché las cosas en SO.
Pero no siento que lo entienda todavía.
Quiero poder almacenar en caché mi solicitud POST dependiendo de varios análisis. Estos pares están en un objeto. Entonces me gustaría almacenar en caché el resultado de la siguiente solicitud:
public ActionResult AdvancedSearch(SearchBag searchBag)
Donde searchBag es un objeto que contiene (un montón) de parámetros de búsqueda opcionales. Mis vistas son ligeras (como deberían ser), pero el acceso a los datos puede llevar bastante tiempo, dependiendo de los campos que se llenen en la bolsa de búsqueda.
Tengo la sensación de que debería almacenar en caché en mi capa de datos, en lugar de en mis acciones.
¿Cómo se supone que debo usar VaryByParam en el atributo OutputCache?
fuente
Respuestas:
También me gusta almacenar en caché en el modelo o la capa de datos. Esto aísla todo lo que tiene que ver con la recuperación de datos del controlador / presentación. Puede acceder a la caché de ASP.NET desde
System.Web.HttpContext.Current.Cache
o utilizar el Bloque de aplicaciones de almacenamiento en caché de la Biblioteca empresarial. Cree su clave para los datos almacenados en caché a partir de los parámetros de la consulta. Asegúrese de invalidar la caché cuando actualice los datos.fuente
O puede ser independiente de HttpContext.Current y acceder a Cache desde HttpRuntime.Cache :)
fuente
A menudo, OutputCaching puede ser el más rápido y eficiente, pero solo cuando cumple con sus requisitos. ¡No tiene sentido tener rápido y eficiente si está mal! ;)
En este caso, parece que el almacenamiento en caché en la capa de datos es correcto porque tiene necesidades complejas de almacenamiento en caché. A veces, puede combinar los dos si el conjunto de parámetros que controlan qué salida se almacena en caché es simple.
fuente
puede usar el almacenamiento en caché de salida algo como esto
[OutputCache(Duration = 10, VaryByParam = "empID")] public ActionResult GetEmployeeDetail(int empID) { Employee e = new Employee(); return Content(e.getEmployeeDetails(empID)); }
o puede usar perfiles de caché configurarlo en la configuración web
<caching> <outputCacheSettings> <outputCacheProfiles> <add name="Admin" duration="86420" varyByParam="none"/> </outputCacheProfiles> </outputCacheSettings> </caching> and use this tag [OutputCache(CacheProfile="Admin")]
fuente