ASP.NET Cache 缓存 Cache.Add方法 笔记

实现功能:定时刷新Cache
错误理解:在使用Cache前,我个人理解是Cache会提供一个定时执行的方法。比如每隔10分钟执行一项任务,而这个任务就要刷新Cache。看MSDN上的文档绕了很久才明白,是对参数的理解错误了。

MSDN示例:链接

理解事项:
1. 使用Cache.Add 方法要先检查Cache[“Key”] (要添加的Key)是否存在,如果存在 Add时会报错(未验证),如果用Cache.Insert 方法则会更新当前Cache[“Key”] 。
2. Cache.Add(string key, object value, CacheDependency dependencies, DateTime absoluteExpiration, TimeSpan slidingExpiration, CacheItemPriority priority, CacheItemRemovedCallback onRemoveCallback);。其中 C#缓存absoluteExpiration、slidingExpiration两个参数的疑惑,absoluteExpiration:用于设置绝对过期时间,它表示只要时间一到就过期,所以类型为System.DateTime,当给这个参数设置了一个时间时,slidingExpiration参数的值就只能为Cache.NoSlidingExpiration,否则出错;slidingExpiration:用于设置可调过期时间,它表示当离最后访问超过某个时间段后就过期,所以类型为System.TimeSpan,当给这个参数设置了一个时间段时,absoluteExpiration的值就只能为Cache.NoAbsoluteExpiration,否则出错;
3. Cache.Add的参数 CacheItemRemovedCallback onRemoveCallback 是 从删除缓存项时的回调方法,删除操作包括:1,Cache.Remove(“Key1”) 操作 2,Cache的Expire过期值到了。而我错我的理解是认为:我要的功能是定时更新,第3、4个参数可设置定时,可 更新(Update)怎么和移除(Remove)联系起来呢? 正确的理解应该是:当Cache过期了 或者被移除了的时候,Cache会自定去执行指定的委托,在这个委托关联的方法里可以根据需要实现如何刷新Cache。MSDN说明 。Cache["Key1"] = null; 将报错,Cache[“Key1”] 值不能为 null。
4. 促使我理解的链接:从缓存中移除项时通知应用程序。里面提到了缓存处理方案,也就是实例,这才能明白。
5. Cache.Insert的方法最后参数类型 CacheItemUpdateCallback表示:Cache项删除前要做的操作(理解上类似SqlServer中的Inserted、Deleted)。
6. .NET API MSDN链接 。

下面代码说明:
1. 要执行代码,可创建Web空项目,添加一个web窗体,并见代码复制到里面。
2. AddItemToCache()方法执行时,会添加一个key为”Key1”,value为”Value 1”的Cache,并设置当过期时间为60秒,当过期时或被移除时执行CacheItemRemovedCallback 委托关联的RemovedCallback方法。

<html>
 <Script runat=server language="C#">
// 
    static bool itemRemoved = false;
    static CacheItemRemovedReason reason;
    CacheItemRemovedCallback onRemove = null;

    public void RemovedCallback(String k, Object v, CacheItemRemovedReason r){
      itemRemoved = true;
      reason = r;
    }
// 

// 
    public void AddItemToCache(Object sender, EventArgs e) {
        itemRemoved = false;

        onRemove = new CacheItemRemovedCallback(this.RemovedCallback);

        if (Cache["Key1"] == null)
          Cache.Add("Key1", "Value 1", null, DateTime.Now.AddSeconds(60), Cache.NoSlidingExpiration, CacheItemPriority.High, onRemove);
    }
// 

// 
    public void RemoveItemFromCache(Object sender, EventArgs e) {
        if(Cache["Key1"] != null)
          Cache.Remove("Key1");
    }
// 
 Script>
 <body>
  <Form runat="server">
   <input type=submit OnServerClick="AddItemToCache" value="Add Item To Cache" runat="server"/>
   <input type=submit OnServerClick="RemoveItemFromCache" value="Remove Item From Cache" runat="server"/>
  Form>
  <% if (itemRemoved) {
        Response.Write("RemovedCallback event raised.");
        Response.Write("
"
); Response.Write("Reason: " + reason.ToString() + ""
); } else { // Response.Write("Value of cache key: " + Server.HtmlEncode(Cache["Key1"] as string) + ""); // } %> body> html>

你可能感兴趣的:(c#基础)