El almacenamiento en caché es una tecnología que almacena datos/información de uso frecuente en la memoria para que la próxima vez que se necesiten los mismos datos/información, se puedan recuperar directamente de la memoria en lugar de generarlos nuevamente desde la aplicación.
El almacenamiento en caché es muy importante para mejorar el rendimiento de ASP porque las páginas y los controles ASP se generan dinámicamente. Esto es extremadamente importante para los datos relacionados con la interacción, porque el tiempo de respuesta es valioso.
En los medios a los que es necesario acceder rápidamente, como la memoria de acceso aleatorio de una computadora, los cachés colocan los datos de uso frecuente. El tiempo de ejecución de ASP contiene pares clave-valor llamados objetos CLR almacenados en caché. Se encuentra dentro de la aplicación y está disponible a través de HttpContext y System.Web.UI.Page.
En cierto modo, el almacenamiento en caché y el almacenamiento de objetos de estado son similares. Sin embargo, la información almacenada en el objeto de estado es determinista. Por ejemplo, puede calcular los datos almacenados en el objeto de estado, pero los datos almacenados en caché no son deterministas.
Los datos no están disponibles en las siguientes circunstancias:
Si su ciclo de vida ha terminado,
Si la aplicación libera su memoria,
Si por alguna razón no se reemplaza el caché.
Puede utilizar un indexador para acceder a elementos en el caché y es posible controlar la vida útil de los objetos en el caché y establecer la relación entre los objetos almacenados en caché y sus recursos físicos.
ASP proporciona los siguientes tipos diferentes de caché:
Caché de salida : el caché de salida puede almacenar una copia de la última página web renderizada o una página parcial enviada al cliente. La próxima vez que el cliente solicite la página, se enviará una copia en caché de la página al cliente en lugar de regenerarla, lo que ahorra tiempo.
Almacenamiento en caché de datos : el almacenamiento en caché de datos se refiere al almacenamiento en caché de datos de la fuente de datos. Mientras no se haya reemplazado el caché, los datos se obtendrán del caché cuando se vuelvan a solicitar. Cuando se reemplaza el caché, se obtienen nuevos datos de la fuente de datos y el caché se llena nuevamente.
Caché de objetos : el caché de objetos sirve para almacenar en caché los objetos de la página, como controles vinculados a datos, etc. Los datos almacenados en caché se colocan en la memoria del servidor.
Almacenamiento en caché de clases : la primera vez que se ejecuta una página web o un servicio web, se ensamblan las clases de la página compilada. Luego, el ensamblaje se almacena en caché en el servidor. La próxima vez que se solicite la página o el servicio, se utilizará el ensamblado almacenado en caché. Cuando se cambia el código fuente, CLR vuelve a compilar el ensamblado.
Caché de configuración : la información de configuración de la aplicación se almacena en un archivo de configuración. La caché de configuración almacena información de configuración en la memoria del servidor.
En este tutorial, consideraremos el almacenamiento en caché de resultados, el almacenamiento en caché de datos y el almacenamiento en caché de objetos.
La representación de una página puede implicar algunos procesos complejos, como el acceso a la base de datos, la representación de controles complejos, etc. El almacenamiento en caché de salida permite evitar viajes de ida y vuelta al servidor almacenando en caché los datos en la memoria. Incluso se puede almacenar en caché toda la página.
La directiva OutputCache es responsable del almacenamiento en caché de resultados. Permite el almacenamiento en caché de resultados y proporciona cierto grado de control sobre su comportamiento.
Sintaxis de la directiva OutputCache:
<%@ OutputCache Duration="15" VaryByParam="Ninguno" %>
Coloque esta directiva debajo de la directiva de página. Esto le indica al entorno que la página debe almacenarse en caché durante 15 segundos. El siguiente controlador de eventos de carga de página ayudará a confirmar si la página se ha almacenado en caché.
protected void Page_Load(remitente del objeto, EventArgs e){ Thread.Sleep(10000 Response.Write("Esta página se generó y se almacenó en caché en:" + DateTime.Now.ToString());}
El método Thread.Sleep() detiene el proceso durante un período de tiempo específico. En este ejemplo, el hilo se detiene durante 10 segundos, por lo que cuando la página se descarga por primera vez, tarda 10 segundos. Sin embargo, la próxima vez que actualice la página, no tomará tiempo porque la página ya se obtuvo del caché y no se volverá a descargar.
La directiva OutputCache tiene las siguientes características para ayudar a controlar el comportamiento de la caché de salida:
propiedad | valor | describir |
---|---|---|
Disco cacheable | verdadero/falso | Describe si la salida se puede escribir en el disco con caché. |
NoTienda | verdadero/falso | Describe si se envía el encabezado de caché "sin almacenamiento". |
Perfil de caché | Nombre de cadena | El nombre del archivo de configuración de caché almacenado en web.config. |
Variar por parámetro | Ninguno*Nombre del parámetro | Utilice valores de cadena separados por punto y coma en solicitudes GET o valores de variables en solicitudes POST. |
Variar por encabezado | *Nombre del archivo de encabezado | Podría ser una cadena delimitada por punto y coma que especifique los encabezados enviados por el cliente. |
Variar por personalizado | Cadena personalizada del navegador | Notifique a ASP.NET sobre los cambios en la caché de salida mediante la versión del nombre del navegador o la cadena del cliente. |
Ubicación | Cualquier cliente descarga el servidor de streaming Ninguno | Cualquiera: la página se puede almacenar en caché en cualquier lugar Cliente: el contenido almacenado en caché se incluye en el navegador Flujo de descarga: el contenido almacenado en caché se guarda en el flujo de descarga y en el servidor Servidor: el caché solo se guarda en el servidor Ninguno: no se permite el almacenamiento en caché. |
Duración | número | El número de segundos que tarda una página u operación en almacenarse en caché. |
Agreguemos un cuadro de texto y un botón al ejemplo anterior y agreguemos un controlador de eventos para este botón.
protected void btnmagic_Click(remitente del objeto, EventArgs e){ Response.Write("<br><br>"); Response.Write("<h2> Hola, " + this.txtname.Text + "</h2>") ;}
Cambie la directiva OutputCache:
<%@ OutputCache Duration="60" VaryByParam="txtname" %>
Cuando se ejecuta el programa, ASP almacena en caché la página según el nombre en el cuadro de texto.
El aspecto principal del almacenamiento en caché de datos es el almacenamiento en caché del control de la fuente de datos. Hemos analizado los controles de fuentes de datos que representan datos de una fuente de datos, como una base de datos o un archivo XML. Estos controles se derivan de la clase abstracta DataSourceControl y tienen las siguientes propiedades heredadas para el almacenamiento en caché:
Período de caché: el tiempo que tarda la fuente de datos en almacenar en caché los datos.
Política de caducidad de caché: define el comportamiento de la caché cuando los datos en ella caducan.
Dependencia del valor de la caché: define un valor de control que saca automáticamente los datos de la caché cuando caduca.
Habilitar el almacenamiento en caché: puede confirmar si los datos están almacenados en caché.
Para demostrar el almacenamiento en caché de datos, creamos un nuevo sitio web y le agregamos un nuevo formulario web. Agregue un control SqlDataSource a la base de datos que se conecta al tutorial de acceso a datos.
En este ejemplo, agregamos una etiqueta a la página que muestra el tiempo de respuesta de la página.
<asp:Label ID="lbltime" runat="servidor"></asp:Label>
Excepto por esta etiqueta, toda la página es igual que el tutorial de acceso a datos. Agregue un controlador de eventos a esta página para descargar la hora.
protected void Page_Load(remitente del objeto, EventArgs e){ lbltime.Text = String.Format("Página publicada en: {0}", DateTime.Now.ToLongTimeString());}
La página diseñada debería verse así:
Cuando ejecutas la página por primera vez, no sucede nada diferente. Visualización de etiquetas, cada vez que se actualiza la página, la página se recargará y el cambio de hora se mostrará en la etiqueta.
A continuación, establezca la propiedad EnableCaching del control de fuente de datos en "verdadero" y la propiedad Cacheduration en "60". Implementará el almacenamiento en caché y el caché caducará cada 60 segundos.
Cada vez que se actualiza, la marca de tiempo cambiará. Pero si cambia los datos en la tabla dentro de los 60 segundos, no se mostrarán hasta que caduque el caché.
<asp:SqlDataSource ID = "SqlDataSource1" runat = "servidor" ConnectionString = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString %>" ProviderName = "<%$ ConnectionStrings: ASPDotNetStepByStepConnectionString.ProviderName %>" SelectCommand = "SELECT * FROM [DotNetReferences]" EnableCaching = "verdadero" CacheDuration = "60"> </asp:SqlDataSource>
El almacenamiento en caché de objetos proporciona mayor flexibilidad que otras tecnologías de almacenamiento en caché. Puede utilizar el almacenamiento en caché de objetos para colocar cualquier objeto en el caché. Los objetos también pueden ser de cualquier tipo: tipos de datos, controles de red, clases, objetos de configuración de datos, etc. Estos elementos se pueden agregar al caché simplemente asignándoles un valor, como se muestra a continuación:
Cache["key"] = item;
Para insertar objetos en el caché, ASP proporciona el método Insert(). Hay cuatro versiones sobrecargadas de este método. Echemos un vistazo:
Sobrecarga | describir |
---|---|
Cache.Insert((clave, valor); | Insértelo en la caché en forma de pares clave-valor, siendo la prioridad y el ciclo de vida los predeterminados. |
Cache.Insert(clave, valor, dependencias); | Inserte el caché en el caché como pares clave-valor, con prioridades y vidas útiles predeterminadas, y dependencias del caché vinculadas a otros archivos o contenido, para que las modificaciones del caché ya no estén limitadas. |
Cache.Insert (clave, valor, dependencias, vencimiento absoluto, vencimiento deslizante); | Indique el período de validez de la configuración anterior. |
Cache.Insert (clave, valor, dependencias, expiración absoluta, expiración deslizante, prioridad, onRemoveCallback); | Junto con la configuración, también permite establecer la prioridad del contenido almacenado en caché y la delegación, indicando un método que se llamará cuando se elimine un objeto. |
El ciclo de vida dinámico se utiliza para eliminar un elemento de caché que no es válido durante un período de tiempo específico. El siguiente fragmento de código guarda un elemento de caché libre de dependencias con una vida útil variable de 10 minutos:
Cache.Insert("my_item", obj, null, DateTime.MaxValue, TimeSpan.FromMinutes(10));
Crea una página usando solo un botón y una etiqueta. Escriba el siguiente código en el evento de carga de la página:
protected void Page_Load(objeto remitente, EventArgs e){ if (this.IsPostBack) { lblinfo.Text += "Página publicada.<br/>" else { lblinfo.Text += "página creada.<br/>"; "; } if (Cache["testitem"] == null) { lblinfo.Text += "Creando elemento de prueba.<br/>"; DateTime testItem = DateTime.Now; lblinfo.Text += "Almacenando elemento de prueba en caché"; lblinfo.Text += "durante 30 segundos.<br/>"; (30), TimeSpan.Zero); } else { lblinfo.Text += "Recuperando elemento de prueba.<br/>"; = (DateTime)Cache["testitem"]; lblinfo.Text += "El elemento de prueba es: " + testItem.ToString(); lblinfo.Text += "<br/>"; />";}
Cuando la página se carga por primera vez, muestra:
Página creada. Creando elemento de prueba. Almacenando elemento de prueba en caché durante 30 segundos.
Si vuelve a hacer clic en el botón dentro de 30 segundos, aunque la página se elimine, el control de etiqueta obtendrá la información del caché, como se muestra a continuación:
Página publicada atrás. Recuperando elemento de prueba. El elemento de prueba es: 14-07-2010 01:25:04