• .NET4缓存过期策略摘录


    以下是网上搜索的资料,仅供参考:

    资料一:
    ASP.NET缓存中Cache过期的三种策略(转自51CTO)

    我们在页面上添加三个按钮并双击按钮创建事件处理方法,三个按钮使用不同的过期策略添加ASP.NET缓存。

    1. <asp:Button ID="btn_InsertNoExpirationCache" runat="server" Text="插入永不过期缓存"   
    2. OnClick="btn_InsertNoExpirationCache_Click" /> 
    3. <asp:Button ID="btn_InsertAbsoluteExpirationCache" runat="server" Text="插入绝对时间  
    4. 过期缓存" OnClick="btn_InsertAbsoluteExpirationCache_Click" /> 
    5. <asp:Button ID="btn_InsertSlidingExpirationCache" runat="server" Text="插入变化时间  
    6. 过期缓存" OnClick="btn_InsertSlidingExpirationCache_Click" /> 

    三个按钮的Click事件处理方法如下:

    1. protected void btn_InsertNoExpirationCache_Click(object sender, EventArgs e)  
    2. {  
    3.     DataSet ds = GetData();  
    4.     Cache.Insert("Data", ds);  
    5. }  
    6. protected void btn_InsertAbsoluteExpirationCache_Click(object sender, EventArgs e)  
    7. {  
    8.     DataSet ds = GetData();  
    9.     Cache.Insert("Data", ds,null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);  
    10. }  
    11. protected void btn_InsertSlidingExpirationCache_Click(object sender, EventArgs e)  
    12. {  
    13.     DataSet ds = GetData();  
    14.     Cache.Insert("Data", ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10));  

    我们来分析一下这三种ASP.NET缓存过期策略。

    ◆永不过期。直接赋值缓存的Key和Value即可

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

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

    在这里,我们都使用了Insert()方法来添加缓存。其实,Cache还有一个Add()方法也能向缓存中添加项。不同之处在于Add()方法只能添加缓存中没有的项,如果添加缓存中已有的项将失败(但不会抛出异常),而Insert()方法能覆盖原来的项。

    注意:和Application不同,这里不需要使用在插入ASP.NET缓存的时候进行锁操作,Cache会自己处理并发。

     来源网址:http://developer.51cto.com/art/200907/140170.htm

    资料二:(个人认为这个说的比较全面)

    .net中的缓存技术:
     缓存是一项在计算中广泛用来提高性能的技术,它将访问频率高的数据或构造成本高的数据存储在内存中。
     在web开发中,性能是应用程序好坏的一个重要因素,而缓存对提高性能带来很大的帮助。让我们来看看缓存能解决的问题: 
    1. 性能——将相应数据存储起来以避免数据的重复创建、处理和传输,可有效提高性能。比如将不改变的数据缓存起来,例如国家列表等,这样能明显提高web程序的反应速度; 
    2.稳定性——同一个应用中,对同一数据、逻辑功能和用户界面的多次请求时经常发生的。当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的不稳定。 
    3.可用性——有时,提供数据信息的服务可能会意外停止,如果使用了缓存技术,可以在一定时间内仍正常提供对最终用户的支持,提高了系统的可用性。
     
    然后让我们来看看在asp.net中的缓存:
    1.在asp.net中,提供了专门用于缓存数据的cache对象,它的应用范围是应用程序域。生存期是和应用程序紧密相关的,每当应用程序启动的时候就重新创建cache对象。它与application对象的主要区别就是提供了专门用于缓存管理的特性,比如依赖和过期策略。 
    2.cache对象定义在system.web.caching命名空间,可以使用httpcontext类的cache属性或page对象的cache属性来得到cache的引用,cache对象除了存储键值对以外,还可以存储.net框架的对象。
     
    缓存是把数据保存在内存以便下次调用,但是数据更新后,内存中的数据并没有更新,仍然是以前的数据,要怎样使缓存的数据也更新呢?我们采用依赖和过期策略。有三个方法可以实现:
    1.文件依赖(file dependency)
    2.键值依赖(key dependency) 
    3.基于时间的过期策略
     
    首先我们来看文件依赖。文件依赖就是当硬盘上的某个(某些)文件更改时,强制移除缓存数据。
    例:
      cachedependency dep = new cachedependency(server.mappath("file.xml"));
      cache.insert("key", "value", dep);
    注意:文件依赖项是通过使用 cache.insert 并提供引用 xml 文件的 cachedependency 对象添加的。
     
    键值依赖,指定缓存中的某个数据项更改时移除。
    比如我们有key1和key2两个缓存,key2是键值依赖于key1的,但key1发生变化,key2就失效。
    例:
    //创建key1缓存
    cache["key1"]="key1 value";
    //是缓存key2键值依赖于key1
    string[] dependencykey=new string[1];
    dependencykey[0]="key1";
    cachedependency dep=new cachedependency(null,dependencykey);
    cache.insert("key2", "value2", dep);
     
    基于时间的过期策略,按照预先定义的时间策略来使数据失效,可以是绝对时间(如某个日期的18:00)也可以是相对现在的相对时间。使用太短和太长的过期时间都不行,不是造成用不上的缓存数据,就是缓存了陈旧的数据并加重了缓存负担,所以可以使用高并发的测试来决定过期时间的最佳值。
    例:
    //绝对时间过期
    cache.insert("dsn", connectionstring, null, datetime.now.addminutes(2), system.web.caching.cache.noslidingexpiration);
    //相对时间过期(即上文提到的“滑动过期”或者“平滑过期”)
    cache.insert("dsn", connectionstring, null, system.web.caching.cache.noabsoluteexpiration, timespan.fromseconds(10));


    相似写法:
    context.Cache.Insert(cacheKey, temp, dp, DateTime.MaxValue, TimeSpan.Zero);

    --------------------------------------- 2013-7-10 begin ---------------------------------------
    [MethodImpl(MethodImplOptions.Synchronized)] //对此方法实现线程同步
            public void TestCache()
            {
                //add
                System.Web.Caching.CacheDependency dp = new System.Web.Caching.CacheDependency(null, null);
                HttpContext.Current.Cache.Add("key", "value", dp, DateTime.Now.AddHours(2), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Normal, null);

                HttpContext.Current.Cache.Insert("key", "value");
                HttpContext.Current.Cache.Insert("key", "value", dp);

                //get
                Object cache = HttpContext.Current.Cache["key"];

                //remove
                HttpContext.Current.Cache.Remove("key");
            }
    --------------------------------------- 2013-7-10 end ---------------------------------------

  • 相关阅读:
    3. 技术专题
    3. 技术专题
    1. 个人经验总结
    2. 阿里巴巴Java开发手册主题
    自动化构建工具演化、对比、总结
    2. 阿里巴巴Java开发手册主题
    (转)高并发高流量的大型网站架构设计(二)
    (转)高并发高流量的大型网站架构设计(一)
    (转)可伸缩性最佳实践:来自eBay的经验
    (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别
  • 原文地址:https://www.cnblogs.com/wpcnblog/p/7089070.html
Copyright © 2020-2023  润新知