Almacenamiento en caché de ASP.NET MVC

El almacenamiento en caché es el almacén de datos como una base de datos, pero es ligeramente diferente a los almacenes de caché, sus datos en la memoria, por lo que no interactúa con el sistema de archivos. También almacena datos en estructuras muy simples como pares clave-valor. Por lo tanto, no tienen que ejecutar consultas complejas para recopilar datos y mantener índices cuando escriben. Por esta razón, el caché tiene más rendimiento que una base de datos.

Razón para usar el caché,

  • Para aumentar el rendimiento de su aplicación porque los datos en caché viven en la memoria.
  • El caché puede aumentar el tiempo de actividad de la aplicación porque todavía está allí si no se puede acceder a su base de datos.

Pero antes de aplicar el atributo de almacenamiento en caché, debe pensarlo.

Lo primero es que debe elegir con cuidado los datos que va a agregar a la caché, como supongamos que está almacenando en caché los datos que se actualizan cada milisegundo, entonces no tiene sentido almacenar en caché ese tipo de datos, por lo que normalmente debe almacenar en caché los datos. que se accede con frecuencia y no cambia con frecuencia.

Y esta función la podemos implementar en asp.net MVC usando atributos de caché de salida para ello.

En esto, aprenderá cómo almacenar en caché el resultado devuelto por una acción del controlador para que un nuevo usuario no necesite crear el mismo contenido cada vez que se llama a la acción.

Con el atributo OutputCache , puede habilitar la funcionalidad de almacenamiento en caché de resultados aplicando una acción de controlador individual o una clase de controlador completa.

Entonces, veamos las propiedades de OutputCache una por una:

Duración: representa el tiempo en segundos que la salida del usuario almacenó en caché. Valor de propiedad: Int32

Sintaxis: 

[OutputCache(Duration=Specify_time)]

Ejemplo: Veamos con un ejemplo:

C#

using System.Web.Mvc;
  
namespace Caching_DataDemo.Controllers {
    public class CacheController : Controller {
        // GET: Cache
        [OutputCache(Duration = 20)]
            public ActionResult GetDate() {
            return View();
        }
    }
}

Como puede ver en el fragmento anterior, hemos habilitado la caché de salida en el nivel de acción del controlador. Guardó la salida en caché durante 20 segundos.

Si llama a la acción GetDate() varias veces ingresando la URL /Cache/GetDate en su navegador y haciendo clic en el botón Actualizar en su navegador repetidamente, la hora que muestra la vista GetDate no cambiará durante 20 segundos. Al mismo tiempo, se muestra la salida porque la vista está en caché.

Puede almacenar en caché la salida durante 1 día especificando el tiempo, pero cuando los recursos de memoria se agotan o se agotan, el caché comienza a eliminar el contenido automáticamente, por lo que no hay garantía de que el contenido se almacene en caché durante el tiempo que especifique.

HTML

@{
    Layout = null;
}
  
<h2>GetDate</h2>
<div>
    <h3>The Current time : 
      @DateTime.Now.ToString("dddd, dd MMMM yyyy HH:mm:ss")</h3>
</div>

La vista GetDate solo muestra la hora actual.

Ahora la pregunta es dónde se almacena realmente ese contenido de caché. Cuando usamos el atributo [OutputCache], el contenido se almacena en caché en ubicaciones definidas en la enumeración OutputCacheLocation .

Puede almacenar datos en caché en cualquier ubicación modificando la propiedad de ubicación de [OutputCache]. 

Ubicación: Valor de la propiedad: String. Valores de propiedad de ubicación que puede establecer:

  1. Cualquiera: por defecto considera este valor. y en este caso, el contenido se almacena en caché en cualquiera de las tres ubicaciones: el servidor web (donde se procesa la solicitud), cualquier servidor proxy (otro servidor involucrado en la solicitud) y el navegador web (desde donde se genera la solicitud) .
  2. Cliente: en este caso, la caché de salida se almacenará en el cliente del navegador desde donde se originó la solicitud.
  3. Servidor: en este caso, la caché de salida se almacenará en el servidor donde se procesa la solicitud.
  4. Ninguno: en este caso, la memoria caché de salida se desactivará para la página web solicitada.
  5. Servidor y Cliente: En este caso. la caché de salida se almacenará en el servidor de origen o en el cliente solicitante

Por valor predeterminado de ubicación, la propiedad es Cualquiera . Puede haber alguna situación en la que desee almacenar datos en caché en una ubicación particular en ese escenario, puede usar esta propiedad.

Consideremos el único escenario, 

C#

using System.Web.Mvc;
  
namespace Caching_DataDemo.Controllers {
    public class CacheController : Controller
    {
        // GET: Cache
        [OutputCache(Duration = 20, 
            Location = OutputCacheLocation.Server)]
        public String GetIdentityofUser()
        {
            return "Good Morning !" + User.Identity.Name;
        }
    }
}

Bueno, como puede ver, en el código anterior estamos almacenando en caché los datos de identidad del usuario durante 20 segundos en el nivel del servidor. En el fragmento de código, hay un controlador, es decir, CacheController cuyo nombre de método de acción es GetIdentityofUser() que devuelve un mensaje de saludo con la identidad del usuario de inicio de sesión actual.

Ahora, si una de las personas considera el nombre de Lucifer, inicia sesión en el sitio web y llama a GetIdentityofUser(), entonces la acción devuelve “¡Buenos días! Lucifer ” .y entre la duración de la memoria caché especificada, otro inicio de sesión posterior en el sitio web, entonces esa persona obtendrá la misma salida de string porque la string se almacena en caché en el nivel del servidor.

[OutputCache(Duration =20,Location=OutputCacheLocation.Server)]

Nota: Nunca almacene en caché contenido personalizado en la memoria caché del servidor.

es posible que desee almacenar en caché el contenido personalizado en la memoria caché del navegador para mejorar el rendimiento. y Si almacena en caché el contenido en el navegador y un usuario realizó la misma acción del controlador varias veces, entonces el contenido puede recuperarse del caché del navegador en lugar del servidor.

Modifiquemos de esa manera, simplemente reemplace la ubicación de caché de salida Servidor a Cliente para que almacene en caché la salida solo en el navegador.

[OutputCache(Duration =20,Location=OutputCacheLocation.Client)]

Ahora, cada usuario obtendrá su propia identidad.

NoStore: Indica si el almacenamiento secundario está habilitado o no. su valor predeterminado se establece en False. Valor de propiedad: Tipo booleano.

También podemos agregar la propiedad NoStore. La propiedad NoStore se usa para informar a los servidores proxy y navegadores que no deben almacenar una copia permanente del contenido en caché.

[OutputCache(Duration =20, Location=OutputCacheLocation.Client, NoStore=true)]

VarByParam: variación de la caché de salida: se utiliza para implementar diferentes versiones de caché de la salida en función de los parámetros de entrada mediante el uso.

Considere un escenario, supongamos que tenemos un controlador llamado ProductRecordController y tiene un método de acción DetailsOfProduct que muestra los detalles del producto según la identificación. lo que significa que este método toma id como parámetro de entrada y, en función de ese parámetro de id, muestra información del producto. Ahora queremos crear una versión de caché diferente de la vista de detalles del producto en función de los parámetros de entrada.

Vamos a implementarlo,

C#

[OutputCache(Duration = int.MaxValue, VaryByParam = "id")]
public ActionResult DetailsOfProduct(int? id)
{
    Product item = db.Products.Find(id);
    return View(item);
}

Como puede ver en el código, el parámetro id se establece en la propiedad VaryByparam , por lo que ahora cada valor diferente del parámetro Id se pasa a la acción del controlador, se generan diferentes versiones almacenadas en caché de la vista DetailsOfProduct .

Cacheprofile: este es en realidad otro enfoque para definir el atributo de caché de salida, puede crear un perfil de caché en el archivo web.config .

OutputCacheProfile: Es un objeto centralizado en el que configuramos ajustes de acceso frecuente como la ubicación del caché y el tiempo de caducidad, etc.

Este enfoque ofrece algunas ventajas.

Primero, control de caché central. Simplemente creando un perfil de caché en el archivo de configuración web. Puede aplicar el perfil a varios controladores o acciones de controlador. En lugar de definir el mismo código en varios lugares, el código resultante se duplica.

En segundo lugar, puede modificar fácilmente su perfil sin volver a compilarlo. Si necesita deshabilitarlo para una aplicación que ya se ha implementado en producción, simplemente puede modificar los perfiles de caché definidos en el archivo de configuración web. Cualquier cambio que hagamos en el archivo de configuración web se detectará y aplicará automáticamente.

Ejemplo: Veamos el ejemplo:

XML

<caching>
    <outputCacheSettings>
        <outputCacheProfiles>
            <add name="TimeCacheProfile" duration="30" 
                 enabled="true" varyByParam="none" />
        </outputCacheProfiles>
    </outputCacheSettings>
</caching>

Aquí puede ver que hemos agregado la configuración en el elemento agregar de la sección OutputCacheProfiles en la sección de almacenamiento en caché del archivo de configuración.

C#

using System;
using System.Web.Mvc;
  
namespace MvcApplication.Controllers
{
    public class ProfileController : Controller
    {
        [OutputCache(CacheProfile="TimeCacheProfile")]
        public string Index()
        {
            return DateTime.Now.ToString("dddd, dd MMMM yyyy HH:mm:ss");
        }
    }
}

y apliqué ese perfil a una acción de controlador usando el atributo CacheProfile de OutputCache

OutputCache(CacheProfile="TimeCacheProfile")]

Si ejecuta el código, la fecha y hora actual seguirá siendo la misma durante 30 segundos, ya que hemos establecido la propiedad de duración en 30 segundos en el perfil de caché. Por lo tanto, almacenará en caché el contenido durante 30 segundos.

Finalmente, aprendió cómo y cuándo usar el atributo OutputCache en ASP.NET MVC

Publicación traducida automáticamente

Artículo escrito por manaligujarathi0 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *