2011-12-08 52 views
5

Tenemos un servidor que ejecuta Windows Server 2003 para nuestro servidor web de producción. Nuestro sitio web tiene diferentes módulos y cada uno se ejecuta dentro de su propio grupo de aplicaciones. Esto hace que el almacenamiento en caché sea un problema, ya que cada módulo tiene su propio caché y muchas veces varios módulos almacenan en caché los mismos elementos. El problema es cuando un elemento en el caché se altera en un módulo, otro módulo que almacena el mismo elemento en caché no se puede actualizar fácilmente.Sugerencias para la solución de caché distribuida .NET simple

Nuestro sitio está escrito en ASP.NET 4.0 y almacenamos en caché conjuntos de datos, objetos comerciales, colecciones, listas, etc. utilizando el objeto estándar HttpRuntime.Cache como un simple almacén de claves/valores. No usamos ninguna dependencia de archivos, pero usamos una caducidad. Solo tenemos alrededor de 400 usuarios a la vez, así que no estamos haciendo nada demasiado loco.

Parece que algún tipo de caché compartida/distribuida ayudaría a resolver este problema, pero no estoy seguro de cuál usar o si sería mejor deshacer el nuestro ya que no necesitamos muchas de las características disponibles en la mayoría de los productos que he visto He visto algunos ejemplos usando WCF pero la mayoría ha sugerido no usar sus ejemplos en producción y sé poco sobre WCF.

Estoy buscando algo simple, rápido, liviano, seguro para ejecutar en producción, y preferiblemente gratis si es posible pero no tiene que ser así. Necesita ejecutarse en Windows Server 2003 & trabajar con ASP.NET 4.0.

¿Alguna sugerencia o información?

Respuesta

7

memcached junto con ASP.NET provider es una elección popular. Sin embargo, tenga en cuenta que en .NET 4.0 la forma recomendada de hacer el almacenamiento en caché es usar el nuevo ObjectCache en lugar de HttpRuntime.Cache. Hay una implementación de memoria incorporada en .NET framework (MemoryCache) y también puede obtener un implementation for memcached.

+0

Gracias por el artículo se ve muy útil, voy a ver su implementación. – Billy

+0

El único proveedor que es un caché distribuido se almacena en memoria caché, los otros no se distribuyen. – ewahner

12

Sonido simple, rápido, liviano y seguro como cosas como redis y memcached, que pueden ser muy efectivos como caché central. Para stackoverflow usamos redis a través de BookSleeve (cliente) pero la mayoría de las tiendas funcionarán de manera similar. También hay un caché de AppFabric, pero eso es considerablemente más complejo.

puntos clave, sin embargo:

  • sus datos tendrán que ser serializable de alguna manera
  • si actualmente está utilizando la memoria caché de objetos de gran tamaño (como una gran DataTable) tendrá que considerar las implicaciones de ancho de banda , o hazlo más granular
  • , probablemente te beneficiarías de una memoria caché de 2 niveles (una memoria local, con la tienda central como secundaria)
  • lo que significa que también necesitarías considerar la invalidación (lo hacemos a través de la API pub/sub en redis)
+0

Gracias por la información, ¿se ejecuta en una caja de Windows o Unix? Si Windows usa el puerto redis, ¿lo usa? ¿Qué te hizo ir con redis sobre memcached? – Billy

+0

@Billy en producción usamos * nix para el servidor, ya que "fork" permite guardar el fondo de forma más eficiente. Sin embargo, es probable que esto no sea un problema para 400 usuarios. Yo uso los binarios dmajkic, que funcionan bien. Re "why" - más funciones: p –

0

si el precio no es un problema, entonces NCache puede ser la mejor opción disponible para you.Its última versión (4.1) NCache trabaja con .NET 4.0

3

Dar Dache intentarlo. Es una solución de caché distribuida .NET de código abierto que es extremadamente eficiente. http://www.getdache.net

+1

Tiene doble licencia. Para proyectos comerciales, deberá comprar una licencia. – Tushar

+1

@haney este sitio ahora muestra la lista de propiedades. ¿Supongo que el proyecto ya no está disponible? – chester89

Cuestiones relacionadas