2009-02-17 24 views
8

Estoy trabajando en un proyecto ASP.NET MVC y he llegado al punto en el que quiero comenzar a considerar mi estrategia de almacenamiento en caché. Intenté dejar mi marco de trabajo lo más abierto posible para su uso en el almacenamiento en caché.Estrategia de almacenamiento en caché, Caché de resultados frente a caché de datos o ambos?

Por lo que escuché durante el podcast de Scott Hanselman, StackOverflow.com utiliza el almacenamiento en caché de salida de página y comprime ese contenido y lo coloca en la memoria RAM. Parece que esto sería genial para la memoria caché de todo el usuario, pero para algo como páginas personalizadas, tendrías que almacenar en caché una versión para cada usuario y eso podría descontrolarse rápidamente.

Por lo tanto, para una estrategia de almacenamiento en caché. ¿Cuál debería usarse, Caché de salida, Caché de datos o combinado? Mis primeros pensamientos son ambos, pero en lo que respecta a las dependencias de caché parece que podría ser un poco complejo.

Respuesta

7

Tenga cuidado con el almacenamiento en caché demasiado agresivo. Aunque el almacenamiento en caché es una herramienta para ayudar al rendimiento, cuando se usa incorrectamente, en realidad puede empeorar el rendimiento.

No puedo responder si el almacenamiento en caché de salida o el almacenamiento en caché de datos funcionaría mejor para usted sin conocer más detalles sobre su proyecto. Puedo ayudar a proporcionar un par de ejemplos de cuándo usar uno sobre otro.

Si tiene un conjunto de datos específico que usaría a menudo en muchas vistas diferentes, sería mejor utilizar el almacenamiento en caché de datos. Utilizaría esto si su operación de búsqueda de datos fuera muy común y costosa en relación con su procesamiento de datos. Si tenía varias vistas que usaban los mismos datos, guardaría su tiempo de obtención de datos.

Si tenía una vista que usaba un conjunto de datos muy específico y la representación de la vista era complicada y esta vista se solicitaba muy a menudo (por ejemplo, la página de inicio del desbordamiento de pila), el almacenamiento en la salida .

Por lo tanto, al final, realmente depende de sus necesidades y tenga cuidado con el uso incorrecto del almacenamiento en caché.

+0

Básicamente es un clon digg. –

+0

Consulte Kigg (http://www.codeplex.com/Kigg) para ver un ejemplo de una aplicación ASP.NET MVC que es una copia de Digg. si su aplicación es exactamente como una copia de Digg, entonces mostraría en caché las páginas de la historia y la página de inicio. almacenar en caché la información del usuario puede ser necesario dependiendo de cómo se vean sus estructuras de datos. – ajma

8

Estamos haciendo caching de API y salida en un sitio web a gran escala (3 millones de visitas al día) (portal de noticias). El sitio es utilizado principalmente por usuarios anónimos, pero tenemos usuarios autenticados y almacenamos en caché un sitio completo solo para ellos, debido a algunas partes personalizadas del sitio, y debo admitir que no tuvimos absolutamente ningún problema con la presión de la memoria.

Por lo tanto, mi consejo sería almacenar en caché todo lo que pueda en la memoria caché API para que la reconstrucción de la caché de salida sea aún más rápida.

Por supuesto, preste mucha atención a los valores de la relación de caché en los contadores de rendimiento. Debería ver números> 95% de éxitos almacenados en caché.

Otra cosa a tener en cuenta es la invalidación de caché, este es un gran problema si tienes mucho contenido relacionado. Por ejemplo, puede almacenar música en la memoria caché y la información sobre un álbum o canción puede mostrarse y almacenarse en caché en cientos de páginas. Si algo cambia en esa canción, debe invalidar todas estas páginas, lo que puede ser problemático.

En pocas palabras, el almacenamiento en caché es una de las mejores características de ASP.NET, está hecho magníficamente y puede confiar en él.

+4

¿Está utilizando una granja de servidores web?Si es así, ¿cada servidor web tiene su propio caché de proceso independiente de otros servidores web? – frankadelic

Cuestiones relacionadas