En .NET 1.1, Cache solo puede crear dependencias de Cache basadas en sistemas de archivos, objetos, etc., pero .NET 2.0 proporciona una nueva dependencia, SqlCacheDependency, que permite que nuestro Cache dependa de los cambios en la base de datos. Aunque este enfoque parece similar a la solución alternativa de 1.1, existe una diferencia esencial entre ellos (la provisión del objeto SqlCacheDependency). (La solución para 1.1 es crear un activador para la tabla de datos, y luego el activador modificará un archivo local cuando se active. La dependencia de un determinado caché en el sistema es este archivo local, para notificar al caché del caché datos cambiados)
SqlCacheDependency de .NET 2.0 se puede usar en versiones posteriores a SqlServer2000. Este artículo presenta cómo usarlo en Sql Server 2000. Sql Server 2005 es ligeramente diferente.
Primero, necesita instalar el marco .NET 2.0. Por supuesto, Sql Server 2000 debe estar disponible. En .NET 2.0, Microsoft proporciona una herramienta de utilidad: aspnet_regsql (en el mismo directorio que aspnet_regiis). Esta es una herramienta de línea de comandos. Los parámetros de la línea de comandos se pueden obtener a través de aspnet_regsql -?. Aquí nos preocupamos por los siguientes parámetros: -ed inicia la base de datos para las dependencias de caché de SQL, -E usa las credenciales actuales de Windows para la autenticación, -d se usa para el nombre de la base de datos del servidor de aplicaciones, si no se especifica ningún nombre de base de datos, el valor predeterminado La base de datos se utiliza "aspnetdb". En este artículo se utilizarán publicaciones de bases de datos de muestra de Microsoft. Luego necesitamos usar la siguiente línea de comando para crear la base de datos dependiente del caché:
aspnet_regsql -ed -E -d pubs
(Nota: los parámetros de la línea de comando aquí distinguen entre mayúsculas y minúsculas)
Después de ejecutar este comando, podemos abrir la base de datos de pubs para ver qué cambios se han producido. Primero, hay una tabla adicional: AspNet_SqlCacheTablesForChangeNotification. Esta tabla tiene 3 campos. nombre de la tabla, notificaciónCreada: hora de creación. changeId: número de cambio (campo acumulativo). También puedes ver que la base de datos tiene varios procedimientos almacenados más, son:
AspNet_SqlCacheRegisterTableStoredProcedure,
AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
Estos procedimientos almacenados son fáciles de entender literalmente. Los detalles del procedimiento almacenado se pueden ver después de abrirlo en el analizador de consultas. Para monitorear los cambios en una tabla, debemos especificar una tabla que debe monitorearse ejecutando el procedimiento almacenado AspNet_SqlCacheRegisterTableStoredProcedure. Por supuesto, también se puede especificar a través de la herramienta de utilidad aspnet_regsql. La línea de comando es la siguiente.
aspnet_regsql -et -E -d pubs -t autores
Después de ejecutar el comando anterior, aspnet_regsql creará un activador para los autores. El siguiente es el activador que creé después de ejecutar el comando:
ESTABLECER QUOTED_IDENTIFIER EN
IR
ESTABLECER ANSI_NULLS EN
IR
ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [autores]
PARA INSERTAR, ACTUALIZAR, ELIMINAR COMO COMENZAR
ESTABLECER SIN CUENTA EN
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'autores'
FIN
IR
DESACTIVAR QUOTED_IDENTIFIER
IR
ESTABLECER ANSI_NULLS EN
IR
Como se puede ver en el disparador, el procedimiento almacenado AspNet_SqlCacheUpdateChangeIdStoredProcedure se ejecutará cuando se inserte, elimine y actualice la tabla de autores. Este procedimiento almacenado agregará un registro a la tabla AspNet_SqlCacheTablesForChangeNotification. El registro es el siguiente:
notificación de nombre de tablaId de cambio creado
autores 2006-06-20 09:38:26.267 1
Cuando realice modificaciones en los datos de autores, se acumulará changeId y otros campos no cambiarán.
Luego necesita agregar algún contenido en web.config y podrá usarlo.
Primero agregue la cadena de conexión de la base de datos:
<cadenas de conexión>
<añadir nombre="pubsConString" conexiónString="servidor=localhost;database=pubs;uid=sa;pwd=micontraseña;"/>
</connectionStrings>
En segundo lugar, agregue la sección de caché:
<sistema.web>
<almacenamiento en caché>
<sqlCacheDependency habilitado="true">
<bases de datos>
<añadir nombre="pubs" ConnectionStringName="pubsConString" pollTime="900"/>
</bases de datos>
</sqlCacheDependency>
</caching>
</sistema.web>
El siguiente es el código de prueba. Cuando se carga la página, se ejecuta el siguiente código:
protected void Page_Load(object sender, EventArgs e) {
si (HttpContext.Current.Cache["xxx"] == nulo) {
SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs son los pubs especificados en la sección de bases de datos, seguidos del nombre de la tabla
HttpContext.Current.Cache.Insert("xxx", "xxx", d);
Response.Write("Crear nuevo valor de caché es xxx.");
}
demás{
Response.Write("Cargar datos desde la caché, el valor es "+HttpContext.Current.Cache["xxx"].ToString());
}
}
Cuando se abre por primera vez, esta página mostrará:
Crear nuevo valor de caché es xxx.
Después de actualizar la página, se muestra:
Cargue datos desde la caché, el valor es xxx.
Cuando utilice el analizador de consultas para modificar los datos en los autores y actualice la página nuevamente, se mostrará:
El valor de creación de caché nuevo es xxx.
Esto muestra que el caché está funcionando normalmente. Cuando la tabla de autores cambia, el contenido del caché dejará de ser válido automáticamente y mi aplicación también volverá a crear un objeto de caché.
Nota: SqlCacheDependency consta de dos constructores, SqlServer2000 solo admite dos parámetros y un parámetro admite SqlServer2005.