Deux dépendances prises en charge dans .net :
CacheDependency td> |
SqlDependency |
||||
Indique une dépendance à l'égard de fichiers ou de répertoires |
Indique une dépendance à la base de données SQL |
Délai d'expiration glissant |
|
Un moment spécifique, tapez DateTime |
A intervalle de temps de type TimeSpan |
Puisque nous devons mettre en cache une grande quantité de données, lorsque la mémoire est limitée, nous devons donner la priorité aux données mises en cache afin que les données sans importance puissent être mises en cache en cas de besoin. La priorité est utilisée pour spécifier l'importance des données mises en cache. Les données importantes peuvent être conservées en mémoire pendant une période plus longue.
Notification de suppression
Peut être fournie lorsque les données mises en cache sont supprimées de la mémoire Un mécanisme de notification à appeler renvoie les méthodes définies par l’utilisateur, qui doivent être conformes à la définition du délégué CacheItemRemovedCallback. .
<asp:Label Text="" runat="server" id="label1"/>
Remarque spéciale :
1. Le moment d'un rappel est imprévisible et ne peut être présumé se produire. Lorsque, le thread d'exécution de la méthode de rappel a le contexte de HttpContext. Afin d'obtenir une référence à l'objet Cache lorsqu'il n'y a pas de contexte de requête, vous pouvez utiliser le cache de l'application via l'attribut cache de HttpRuntime.
<span style="font-size:14px;">namespace 基于文件的缓存依赖 { public class CacheManager { public static string Message { get { HttpContext context = HttpContext.Current; //首先从缓存中获取 string message = context.Cache["Message"] as string; //如果缓存中没有数据 if (message==null) { string path = context.Server.MapPath("TestFileCache.txt"); message = System.IO.File.ReadAllText(path); //将信息保存到缓存中,设置响应的过期时间为1分钟 context.Cache.Add( "Message", message, new System.Web.Caching.CacheDependency(path),//依赖于文件或者目录的依赖 System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用绝对过期时间 new TimeSpan(0, 0, 5),//缓存的时间 System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级 Callback); //过期时的回调 } return message; } } /// <summary> /// Callbacks the specified key. /// </summary> /// <param name="key">The key.</param> /// <param name="value">The value.</param> /// <param name="reason">The reason.</param> /// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks> private static void Callback( string key, Object value, System.Web.Caching.CacheItemRemovedReason reason //原因 ) { if (reason == System.Web.Caching.CacheItemRemovedReason.Expired) { HttpRuntime.Cache.Insert("Message","时间已到,缓存已过期"); } } } }</span>
2. Vous ne pouvez pas utiliser de méthodes d'instance comme méthodes de rappel sur la page. Lors du blocage de la méthode de rappel sur la page, la référence pointant vers la méthode de rappel empêchera le mécanisme de récupération de place, donc. la mémoire sera rapidement épuisée.
3. La méthode de rappel est généralement implémentée via la méthode statique de la classe personnalisée, ou en utilisant la méthode statique de l'objet page.
Deuxième exemple de mise en cache basée sur des fichiers
Ajoutez d'abord une étiquette sur la page de test :
protected void Page_Load(object sender, EventArgs e) { this.label1.Text = CacheManager.Message; //获取缓存 }
Ensuite, ajoutez la classe de gestion du cache :
Ici, distinguer la méthode Add et la méthode Insert du cache :
Lors de l'appel à Add, si l'élément de cache à ajouter existe Si tel est le cas, l'appel échouera ; mais si insert est utilisé, la valeur nouvellement insérée écrasera la valeur d'origine.