net mvc control cache asp .net asp.net memcached

.net - mvc - redis asp net core



¿Memcached es intercambiable con ASP.NET State Server? (3)

Actualmente, Memcached no es compatible con la creación de reflejo de datos, solo brinda la posibilidad de dividir las entradas en varios servidores para evitar que se inunde. Esto funciona mezclando la clave con la dirección del servidor o usando el algoritmo de hash consistente (libketama).

Sin embargo, en general, Memcached no debe verse como una capa de almacenamiento persistente, y en casi todos los casos, los datos en la memoria caché deben ser los mismos que en la base de datos. Si está realizando un cambio en los datos de sesión de un usuario y desea almacenarlo en caché, actualícelo en Memcached y luego actualícelo en la base de datos inmediatamente después. Si quiere ser muy cuidadoso, puede implementar un sistema de diario simple para asegurarse de que estos datos permanezcan consistentes en caso de falla del sistema.

Sin embargo, Memcached definitivamente se está utilizando para sesiones de caché, el creador lo dice en un artículo de Jinux Journal. En realidad, solo está destinado a optimizar las operaciones de lectura, al final del día, todos los datos que le interesan deberían almacenarse en la base de datos.

Utilizo los servicios de ASP.NET y WCF en un entorno de servidor web con equilibrio de carga, utilizando Memcached en la capa de servicio.

También quería reemplazar el uso de ASP.NET State Server (para estado de sesión) con Memcached. Ahora me temo que no es algo bueno, porque según tengo entendido, Memcached es un servidor de caché en lugar de un servidor de estado, ¿es cierto?

Si lo entiendo correctamente, Memcached no está distribuyendo datos a otros nodos en la granja de Memcached. En su lugar, se utiliza un algoritmo hash especial para determinar cuál de los nodos de la granja contiene los datos de una clave solicitada, mientras que ASP.NET State Server distribuye los datos ASAP cuando se ha agregado, para evitar un único punto de error.

En otras palabras, Memcached debe usarse solo por razones de rendimiento, los datos almacenados en él siempre deben poder volver a crearse, en caso de que el elemento se haya eliminado para dejar espacio para nuevos objetos, o en caso de que la única máquina que almacenara los datos abajo.

Entonces, ¿no puedo confiar en Memcached solo para almacenar datos de estado de la sesión? Si no puedo, entonces no entiendo cómo se compara y se ve a menudo Memcached como una alternativa al uso de ScaleOut StateServer y ASP.NET State Server, ya que estos son realmente servidores de estado, que es otra cosa, ¿no?

Ahora estoy un poco inseguro sobre cuál es el mejor enfoque para el estado de sesión distribuida de alto rendimiento en una granja de servidores web.

Gracias


En una situación ideal, los datos de la sesión son solo un valor único, la representación numérica interna de la identificación del usuario. Significa que el usuario ha pasado satisfactoriamente la página de inicio de sesión con la contraseña correcta.

Pero, ¿qué pasa con otros, como , por ejemplo, los datos dinámicos en la página dependiendo del usuario: el apodo del usuario, el número de reputación, las insignias obtenidas, la permsión para dejar un comentario. A menudo son el resultado de múltiples JOIN en múltiples tablas de bases de datos.

Si no usa memcached en uso, estas consultas casi siempre leen datos del disco, que es una operación muy lenta, no muy escalable. ¿El caché dentro de la base de datos? ¿Cuál crees que sería la razón de aciertos considerando que la base de datos hace otras cosas además de administrar datos de sesión? ¿Por qué tienes que leer desde el disco mientras puedes desde la memoria?

Por supuesto, cualquier escritura en la información del usuario relevante debe invalidar la sesión correspondiente en memcached.


http://www.codeplex.com/memcachedproviders tiene un proveedor de estado de sesión para asp.net que almacena valores en memcached. Proporciona la capacidad de hacer una copia de seguridad de los datos de la sesión en ''SQL Server. Como yogman dijo que los datos de la sesión se almacenan como un valor. Si ocurre un desalojo, se perderá la sesión completa de ese usuario y se dirigirá al usuario a la pantalla de inicio de sesión. Memcached no expulsa ningún dato antes de la caducidad a menos que se esté quedando sin espacio para contener datos nuevos.