Pregunta

Para un componente .NET que se utilizará tanto en aplicaciones web como en aplicaciones de cliente enriquecido, parece haber dos opciones obvias para el almacenamiento en caché:System.Web.Caching o Ent.Lib.Bloque de almacenamiento en caché.

  • ¿Que usas?
  • ¿Por qué?

Sistema.Web.Caching

¿Es seguro usarlo fuera de aplicaciones web?He visto información contradictoria, pero creo que la respuesta es tal vez más o menos no.

No espero utilizar uno de sus aspectos más destacados, Dependencia de SqlCache, pero la adición de CacheItemUpdateCallback en .NET 3.5 parece algo realmente bueno.

Bloque de aplicaciones de almacenamiento en caché de biblioteca empresarial

  • Otros bloques ya están en uso, por lo que la dependencia ya existe.
  • la persistencia de la caché no es necesaria;regenerar el caché al reiniciar está bien

Algunos elementos de la caché siempre deberían estar disponibles, pero actualizarse periódicamente.Para estos artículos, recibir una devolución de llamada después que se haya eliminado un elemento no es muy conveniente.Parece que un cliente tendrá que simplemente dormir y sondear hasta que se recupere el elemento de caché.

Memcached para Win32 + cliente .NET

¿Cuáles son los pros y los contras cuando no necesitas un repartido ¿cache?

¿Fue útil?

Solución

Estos son los ítems que considero para el tema de Caching:

MEMCached Win32 Velocity .NET Cache Enterprise Library Biblioteca Bloque de aplicación de almacenamiento en caché

MemCached Win32: Hasta hace poco he usado MemCached Win32.Esto es similar a una granja de servidores web (muchos servidores que ofrecen el mismo contenido para alta disponibilidad), pero es una granja de caché.Esto significa que puedes instalarlo localmente en tu servidor web inicialmente si no tienes los recursos para hacerlo más grande.Luego, a medida que avanza, puede escalar horizontalmente (más servidores) o verticalmente (más hardware).Este es un producto que fue portado desde el MemCached original para funcionar en Windows.Este producto se ha utilizado ampliamente en sitios de mucho tráfico. http://lineofthink.com/tools/memcached

Velocidad: Esta es la respuesta de Microsoft a productos como MemCached.MemCached ha estado disponible durante bastante tiempo, Velocity está en modo CTP.Debo decir que por lo que he leído hasta ahora, este producto seguramente me llamará la atención una vez que esté disponible.Pero no me atrevo a ejecutar grandes proyectos de producción en un producto CTP sin ningún historial.Sin embargo, comencé a jugar con él, ya que una vez que gane impulso, ¡MemCached ni siquiera se comparará con aquellos encerrados en el mundo de Windows! http://blogs.msdn.com/velocity/

Caché .NET: No hay ninguna razón para descontar el caché .NET estándar.Está integrado y listo para usar de forma gratuita y sin necesidad de configuración (importante).Ofrece flexibilidad al ofrecer mecanismos para almacenar elementos en la memoria local, un servidor de estado ÚNICO o una base de datos centralizada.Donde interviene Velocity es cuando necesita más de un servidor de estado (caché en la memoria) y no desea utilizar una base de datos lenta para almacenar su caché.

Bloque de aplicaciones empresariales: Me mantengo alejado de todos los bloques de aplicaciones empresariales.¡Son frameworks pesados ​​que dan más de lo que generalmente necesito!Siempre y cuando recuerdes envolver todo lo relacionado con el código que no sea tuyo y seguir reglas simples de codificación, ¡sigue cualquiera de los otros métodos además de este!(Solo mi opinión, por supuesto: ¡MySpace aprovecha al máximo los bloques de aplicaciones empresariales!)

¡No tienes que elegir por adelantado! Generalmente creo un contenedor de caché con el que me comunico en mi código para métodos como Get, Set, Exists, Remove, ListKeys, etc.Luego, esto apunta a un nivel subyacente de abstracción de caché que puede apuntar a la caché de MemCached, Velocity o .NET.Utilizo StructureMap (o elijo otro contenedor de IoC) para inyectar qué forma de caché quiero usar para un entorno determinado.En mi cuadro de desarrollo local, podría usar caché .NET en la sesión.En producción generalmente uso MemCached Win 32.Pero independientemente de cómo esté configurado, puedes cambiar fácilmente las cosas para probar cada sistema y ver cuál funciona mejor para ti.¡Solo necesita asegurarse de que su aplicación sepa lo menos posible sobre cómo se almacenan en caché las cosas!Una vez que esta capa de abstracción esté implementada, puede hacer cosas como ejecutar un algoritmo de compresión (gzip) para todos los datos que entran y salen del caché, lo que le permitiría almacenar 10 veces la cantidad de datos en el caché.- transparentemente.

¡Cubro .NET Cache, MemCached Win32, StructureMap y las abstracciones apropiadas en mi libro si estás interesado!

ASP.NET 3.5 Redes sociales (http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1 ) Andrew Siemer www.andrewsiemer.com Blog.Andrewsiemer.com www.socialnetworkingin.net

ActualizarSe modificó el enlace que enumera los sitios que utilizan Memcached.¡Gracias David por notar que estaba roto!

Otros consejos

Tenga en cuenta que la documentación de EntLib le dirige específicamente hacia la caché de ASP.NET para aplicaciones ASP.NET.Esa es probablemente la recomendación más fuerte para usarlo aquí.Además, el caché de EntLib no tiene dependencias, lo que para mí es una gran razón para no usarlo.

No creo que haya una limitación técnica como tal en el envío de System.Web como parte de su aplicación, aunque es un poco extraño que hayan incluido ese aviso en la página .NET 3.5.Hanselman en realidad dice que al principio le asustó esta idea, pero se convenció.Además, si lees los comentarios, dice que el bloque tiene demasiadas partes móviles y que la caché ASP.NET es mucho más liviana.
Creo que este es exactamente el tipo de problema que Velocidad se va a resolver, pero eso es sólo una vista previa por ahora :-(

Yo diría que uses Web.Caching y veas cómo te va.Si coloca algún tipo de capa de abstracción encima, siempre tendrá la opción de cambiarla por el bloque EntLib más adelante si encuentra problemas.

Echa un vistazo a memcached.Es un sistema de almacenamiento en caché distribuido realmente interesante, rápido y liviano.Existen API para varios de los lenguajes más populares, incluido C#.Puede que no funcione bien en el lado del cliente (a menos, por supuesto, que el cliente obtenga los datos almacenados en caché de un servidor de algún tipo), pero si abstrae su uso de memcached a una interfaz específica, podría implementar la interfaz con otro almacenamiento en caché. sistema.

@Davide Vosti

"Si lo ponen en el espacio de nombres web, creo que es por una buena razón". ¿Se aplica esa misma lógica al tiempo de ejecución de concurrencia y coordinación (CCR) en el estudio robótico?¿No?No lo creo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top