Sous .NET 1.1, Cache ne peut créer que des dépendances de cache basées sur des systèmes de fichiers, des objets, etc., mais .NET 2.0 fournit une nouvelle dépendance, SqlCacheDependency, qui permet à notre cache de dépendre des modifications apportées à la base de données. Bien que cette approche ressemble à la solution de contournement de la version 1.1, il existe une différence essentielle entre elles (la fourniture de l'objet SqlCacheDependency). (La solution de contournement pour la version 1.1 consiste à créer un déclencheur pour la table de données, puis le déclencheur modifiera un fichier local lorsqu'il sera déclenché. La dépendance d'un certain cache dans le système est ce fichier local, afin de notifier au cache le fichier mis en cache. données modifiées)
SqlCacheDependency de .NET 2.0 peut être utilisé dans les versions postérieures à SqlServer2000. Cet article explique comment l'utiliser sous Sql Server 2000. Sql Server 2005 est légèrement différent.
Tout d'abord, vous devez installer le framework .NET 2.0. Bien entendu, SQL Server 2000 doit être disponible. Dans .NET 2.0, Microsoft fournit un utilitaire : aspnet_regsql (dans le même répertoire que aspnet_regiis). Il s'agit d'un outil de ligne de commande. Les paramètres de ligne de commande peuvent être obtenus via aspnet_regsql -?. Ici, nous nous soucions des paramètres suivants : -ed démarre la base de données pour les dépendances du cache SQL, -E utilise les informations d'identification Windows actuelles pour l'authentification, -d est utilisé pour le nom de la base de données du serveur d'applications, si aucun nom de base de données n'est spécifié, la valeur par défaut la base de données est utilisée "aspnetdb". Les exemples de publications de bases de données de Microsoft seront utilisés dans cet article. Ensuite, nous devons utiliser la ligne de commande suivante pour créer la base de données dépendante du cache :
aspnet_regsql -ed -E -d pubs
(Remarque : les paramètres de ligne de commande ici sont sensibles à la casse)
Après avoir exécuté cette commande, nous pouvons ouvrir la base de données pubs pour voir quels changements se sont produits. Tout d'abord, il y a une table supplémentaire : AspNet_SqlCacheTablesForChangeNotification. nom de la table, notificationCreated : heure de création. changeId : numéro de changement (champ cumulatif). Vous pouvez également voir que la base de données contient plusieurs procédures stockées supplémentaires, à savoir :
AspNet_SqlCacheRegisterTableStoredProcedure,
AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
Ces procédures stockées sont faciles à comprendre littéralement. Les détails de la procédure stockée peuvent être consultés après l'avoir ouverte dans l'analyseur de requêtes. Afin de surveiller les modifications dans une table, nous devons spécifier une table qui doit être surveillée en exécutant la procédure stockée AspNet_SqlCacheRegisterTableStoredProcedure. Bien entendu, elle peut également être spécifiée via l'utilitaire aspnet_regsql.
aspnet_regsql -et -E -d pubs -t auteurs
Après avoir exécuté la commande ci-dessus, aspnet_regsql créera un déclencheur pour les auteurs. Voici le déclencheur que j'ai créé après l'exécution de la commande :
ACTIVER QUOTED_IDENTIFIER
ALLER
DÉFINIR ANSI_NULLS SUR
ALLER
ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [auteurs]
POUR INSÉRER, METTRE À JOUR, SUPPRIMER COMME COMMENCER
DÉFINIR NOCOUNT ON
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'auteurs'
FIN
ALLER
DÉSACTIVER QUOTED_IDENTIFIER
ALLER
DÉFINIR ANSI_NULLS SUR
ALLER
Comme le montre le déclencheur, la procédure stockée AspNet_SqlCacheUpdateChangeIdStoredProcedure sera exécutée lorsque la table des auteurs est insérée, supprimée et mise à jour. Cette procédure stockée ajoutera un enregistrement à la table AspNet_SqlCacheTablesForChangeNotification. Le bilan est le suivant :
tableName notificationCreated changeId
auteurs 2006-06-20 09:38:26.267 1
Lorsque vous apportez des modifications aux données dans les auteurs, changeId sera accumulé et les autres champs ne changeront pas.
Ensuite, vous devez ajouter du contenu dans web.config et vous pouvez l'utiliser.
Ajoutez d'abord la chaîne de connexion à la base de données :
<chaînesdeconnexion>
<add name="pubsConString" connectionString="server=localhost;database=pubs;uid=sa;pwd=mypassword;"/>
</connectionStrings>
Ajoutez ensuite la section cache :
<système.web>
<mise en cache>
<sqlCacheDependency activé="true">
<bases de données>
<add name="pubs" connectionStringName="pubsConString" pollTime="900"/>
</bases de données>
</sqlCacheDependency>
</cache>
</system.web>
Voici le code de test Lorsque la page est chargée, le code suivant est exécuté :
protected void Page_Load(object sender, EventArgs e) {.
if (HttpContext.Current.Cache["xxx"] == null) {
SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs est les pubs spécifiés dans la section bases de données, suivis du nom de la table
HttpContext.Current.Cache.Insert("xxx", "xxx", d);
Response.Write("Créer une nouvelle valeur de cache est xxx.");
}
autre{
Response.Write("Charger les données depuis le cache, la valeur est "+HttpContext.Current.Cache["xxx"].ToString());
}
}
Lors de la première ouverture, cette page affichera :
Créer une nouvelle valeur de cache est xxx.
Après avoir actualisé la page, elle affiche :
Charger les données depuis le cache, la valeur est xxx.
Lorsque vous utilisez l'analyseur de requêtes pour modifier les données dans les auteurs et actualisez à nouveau la page, il affichera :
La valeur de création d'un nouveau cache est xxx.
Cela montre que le cache fonctionne normalement. Lorsque la table des auteurs change, le contenu du cache deviendra automatiquement invalide et mon application recréera également un objet Cache.
Remarque : SqlCacheDependency se compose de deux constructeurs, SqlServer2000 ne prend en charge que deux paramètres et un paramètre prend en charge SqlServer2005.