2008-10-13 20 views
6

No sé si debo usar el almacenamiento en caché httpcontext o el bloque de aplicación de caché de Enterprise Library. Además, ¿cuál es el mejor patrón para la estrategia de almacenamiento en caché al eliminar o actualizar una entidad que es parte de una lista en caché?¿Cómo puedo implementar la estrategia de almacenamiento en caché en mi Asp.net Mvc con el repositorio linq2sql?

¿Debo eliminar toda la lista del caché o solo eliminar el elemento de la lista en caché? Si lo actualizo, eliminaré la lista del caché o actualizaré la entidad en él.

Respuesta

2

Hay varios enfoques para implementar el almacenamiento en caché, httpcontext es el más fácil, pero no es necesariamente el peor. Eche un vistazo a memcached o MS Velocity, que se pueden utilizar como backends para ASP.NET Cache. Especialmente Memcached tiene una reputación de hacer un muy buen trabajo.

En cuanto a la política de caché: debe decidir qué funciona mejor para usted. Personalmente eliminaría la lista completa del caché al actualizar/eliminar en lugar de tratar de averiguar si la entidad está en la lista, ya que se necesita una cantidad de tiempo no trivial y debe tener en cuenta los problemas de concurrencia (bloqueando la lista, ya que alguien podría hacer una actualización/eliminación de otra entidad). A veces tiene sentido actualizar una entidad en su lugar (si tiene un objeto completo con todos los datos que necesita), a veces es una pérdida de tiempo, porque debido a algún cambio de estado la entidad debe moverse a otro lugar (por ejemplo, cuando ordena por LastChangedDate, etc.)

No olvide optimizar su código de base de datos también para que no le tome demasiado tiempo actualizar la lista de descarga.

6

Después de haber hecho algunas pruebas con ambos hice una revisión completa del bloque de aplicación de caché en el contexto de nuestro código y escribí mi experiencia con el blog. Es muy simple de usar y lo suficientemente potente para nuestras necesidades. Lo recomendaría, my results were blogged here.

En su posición, usaría el patrón Repositorio para mantener mi caché, funciona bien para los conjuntos de datos de la base de datos y debería funcionar igual de bien para la caché en el suyo. Si no está familiarizado con el patrón de repositorio, check out this post from Steven Walther.. Sin embargo, tendería a estar en desacuerdo con la respuesta anterior, sacando solo los elementos que necesita para modificarlos y dejando el resto intacto. Esto le permitirá caducar los elementos del caché independientemente de toda la lista, si así lo desea.

Cuestiones relacionadas