27
2016
08

C#中System.Web.Caching.Cache缓存

今天在整理类库,正好弄到缓存这边,就找找资料看一下。System.Web.Caching.Cache是微软提供的一个Web下的类库,Cache类,是一个用于缓存常用信息的类。HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例。查看一个类就是从它的属性、方法等方面查看,只有了解的属性,才能明白各个方法是做什么用的。


一、属性

C#中System.Web.Caching.Cache缓存 Cache .Net  第1张

二、方法

C#中System.Web.Caching.Cache缓存 Cache .Net  第2张

三、静态字段

C#中System.Web.Caching.Cache缓存 Cache .Net  第3张

例子

namespace CacheDemo
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Person p = new Person();
            p.Id = 1;
            p.Name = "masoft";

            Cache cache = HttpRuntime.Cache;
            cache.Insert("A",p);
            cache.Insert("B","字符串");
            
            Response.Write(cache.Get("B").ToString());     //输出 字符串
            Person p2 = cache["A"] as Person;
            Response.Write(p2.Id + " : " + p2.Name);        //输出 1 : masoft
            Response.Write(cache.EffectivePrivateBytesLimit);   //-1 只读属性
            Response.Write(cache.EffectivePercentagePhysicalMemoryLimit);   //98    开始移除项之前可以使用到98%


            Response.Write(cache.Count);        //输出 3
            Response.Write(cache["B"]);        //输出 字符串 支持索引器式的读取

            cache.Remove("BB");        //从cache中移除一项
            Response.Write("~~~" + cache["B"] + "~~~");    //移除了输出 null,但程序不报错

            foreach (var obj in cache)
            {
                Response.Write(obj.GetType() + "<br/>");
            }
        }
    }

    public class Person
    {
        public int Id
        {
            get;
            set;
        }

        public string Name
        {
            get;
            set;
        }
    }
}

四、文件缓存依赖

文件依赖已更改缓存就被清除


五、绝对过期时间

NoSlidingExpiration  绝对过期时间,当超过设定时间,立即移除。


六、滑动过期时间

NoAbsoluteExpiration  当超过设定时间没再使用时,才移除缓存


七、缓存优先级

使用CacheItemPriority枚举来设置缓存的优先级

//在服务器释放系统内存时,具有该优先级级别的缓存项最有可能被从缓存删除。
        Low = 1,//在服务器释放系统内存时,具有该优先级级别的缓存项比分配了 System.Web.Caching.CacheItemPriority.Normal
        //优先级的项更有可能被从缓存删除。
        BelowNormal = 2,//在服务器释放系统内存时,具有该优先级级别的缓存项很有可能被从缓存删除,其被删除的可能性仅次于具有 System.Web.Caching.CacheItemPriority.Low
        Normal = 3,//缓存项优先级的默认值为 System.Web.Caching.CacheItemPriority.Normal。
        Default = 3,//在服务器释放系统内存时,具有该优先级级别的缓存项被删除的可能性比分配了 System.Web.Caching.CacheItemPriority.Normal
        //优先级的项要小。
        AboveNormal = 4,//在服务器释放系统内存时,具有该优先级级别的缓存项最不可能被从缓存删除。
        High = 5,//在服务器释放系统内存时,具有该优先级级别的缓存项将不会被自动从缓存删除。但是,具有该优先级级别的项会根据项的绝对到期时间或可调整到期时间与其他项一起被移除
        NotRemovable = 6,


八、缓存移除通知应用程序

Add方法的最后一个参数,委托。


九、数据库依赖缓存

需要配置数据库缓存模式

(详情查看本文来源:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html


十、组合依赖缓存

当依赖的内容为多个Dependency时,可以通过AggregateCacheDependency创建依赖的组合,以便在任何一个依赖项发生变化时,使缓存项失效。
组合的缓存依赖内部为一个集合,可以保存多个缓存依赖对象,将这些缓存依赖对象作为一个整体应用在缓存项目上,当其中某一个缓存依赖失效的时候,就可以使缓存的数据被丢弃。


十一、System.Web.Caching.Cache Insert和Add方法的区别

比较、区别

    a). Insert方法支持5种重载,使用灵活,而Add方法必须提供7个参数;

    b). Add方法可以返回缓存项的数据对象,Insert 返回Void;

    c). 添加重复缓存情况下(Key已存在),Insert会替换该项,而Add方法则不执行任何操作,并返回原来保存的object对象(Update 2014-03-18)。

  过期策略 

    a). 永不过期
      Insert(string key, object value);

    b). 绝对时间过期

      DateTime.Now.AddSeconds(10)表示缓存在10秒后过期,TimeSpan.Zero表示不使用平滑过期策略。

      例:Cache.Insert("Data", ds,null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);

    c). 变化时间过期(平滑过期)

      DateTime.MaxValue表示不使用绝对时间过期策略,TimeSpan.FromSeconds(10)表示缓存连续10秒没有访问就过期。

      例:Cache.Insert("Data", ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10));

十二、清除缓存

清空缓存主要通过Remove()方法,但是只能通过传入一个Key,清空一个。

GetEnumerator()方法用于获取所有缓存项。MoveNext()用于将位置移动到下一个缓存项。

如果想清空所有缓存,由于Cache类没有提供RemoveAll()方法我们只能Count循环删除


本文标题:C#中System.Web.Caching.Cache缓存
本文链接:https://masoft.cn/post/44.html
作者授权:除特别说明外,本文由 智汇软件 原创编译并授权 北京,深圳,重庆,大连,青岛,济南软件设计与定制 刊载发布。
版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

分享:

支付宝

微信