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#">
// <snippet2>
    static bool itemRemoved = false;
    static CacheItemRemovedReason reason;
    CacheItemRemovedCallback onRemove = null;

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

// <snippet3>
    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);
    }
// </snippet3>

// <snippet4>
    public void RemoveItemFromCache(Object sender, EventArgs e) {
        if(Cache["Key1"] != null)
          Cache.Remove("Key1");
    }
// </snippet4>
 </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("<BR>");
        Response.Write("Reason: <B>" + reason.ToString() + "</B>");
     }
     else {
// <snippet5>
        Response.Write("Value of cache key: <B>" + Server.HtmlEncode(Cache["Key1"] as string) + "</B>");
// </snippet5>
     }
  %>
 </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值