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

资料一:
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));
  15. }

我们来分析一下这三种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 ---------------------------------------

.NET4缓存过期策略摘录的更多相关文章

  1. 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)

    在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...

  2. asp.net的Context.Cache缓存过期策略

    最近使用Context.Cache需要了解Cache的缓存过期策略. 文章:ASP.NET缓存中Cache过期的三种策略

  3. Redis 键的过期删除策略及缓存淘汰策略

    前言 Redis缓存淘汰策略与Redis键的过期删除策略并不完全相同,前者是在Redis内存使用超过一定值的时候(一般这个值可以配置)使用的淘汰策略:而后者是通过定期删除+惰性删除两者结合的方式进行内 ...

  4. 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透

    前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...

  5. 拥抱.NET Core系列:MemoryCache 缓存过期

    在上一篇"拥抱.NET Core系列:MemoryCache 初识"中我们基本了解了缓存的添加.删除.获取,那么今天我们来看看缓存的过期机制.这里和上篇一样将把"Micr ...

  6. redis 的过期策略都有哪些?内存淘汰机制都有哪些?

    面试题 redis 的过期策略都有哪些?内存淘汰机制都有哪些?手写一下 LRU 代码实现? 面试官心理分析 如果你连这个问题都不知道,上来就懵了,回答不出来,那线上你写代码的时候,想当然的认为写进 r ...

  7. redis的过期策略都有哪些?

    1.面试题 redis的过期策略都有哪些?内存淘汰机制都有哪些?手写一下LRU代码实现? 2.面试官心里分析 1)老师啊,我往redis里写的数据怎么没了? 之前有同学问过我,说我们生产环境的redi ...

  8. Redis过期策略

    一.设置过期时间 expire key time(以秒为单位) -- 这是最常用的方式 setex(String key, int seconds, String value) -- 字符串独有的方式 ...

  9. Redis数据过期策略详解

    http://www.cnblogs.com/xuliangxing/p/7151812.html 本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用 ...

随机推荐

  1. Hibernate -- 对象关系映射基础

  2. org.apache.log4j.Logger用法

    在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文 ...

  3. T-SQL RIGHT JOIN

    RIGHT JOIN外联接与LEFT JOIN相似.取得右表所有记录,并按过滤条件ON去取得左表的记录,取得这些记录,如遇上没有匹配的列使用NULL填充. 演示数据来源,两张表来自http://www ...

  4. GDI+ 双缓冲字体模糊

    只是记录自己的UI库,对其他估计没什么帮助 void CListCtrlUI::ReFillRect(HDC hdc){ if (!m_pImage) { Graphics gs(hdc); int ...

  5. The 2014 ACM-ICPC Asia Mudanjiang Regional Contest

    The 2014 ACM-ICPC Asia Mudanjiang Regional Contest A.Average Score B.Building Fire Stations C.Card G ...

  6. TCP/UDP编程步骤和区别

    一. 概念解析 套接字:一种特殊的文件描述符.一头指向套接字地址(用户),一头指向套接字结构(内核). 套接字结构:由内核维持的一种数据结构,可通过套接字来操作. 套接字地址:ip和port. 二. ...

  7. 个人作业4——alpha阶段个人小结

    一.个人总结 在alpha 结束之后, 每位同学写一篇个人博客, 总结自己的alpha 过程: 请用自我评价表:http://www.cnblogs.com/xinz/p/3852177.html 有 ...

  8. nodejs cheerio模块提取html页面内容

    nodejs cheerio模块提取html页面内容 1. nodejs cheerio模块提取html页面内容 1.1. 找到目标元素 1.2. 美化文本输出 1.3. 提取答案文本 1.4. 最终 ...

  9. 010-对象——构造方法__construct析构方法__destruct使用方法 PHP重写与重载

    <?php /*抽象方法和抽象类 抽象类必须通过子类继承之后,才能实现实例化. 类中有抽象方法,必须声明抽象类. 如果是抽象类,可以没有抽象方法,但必须通过子类去继承之后,实现实例化 final ...

  10. Javascript鼠标和滚轮事件

    (转自:http://www.cnblogs.com/MrBackKom/archive/2012/06/25/2562920.html) a)鼠标事件 鼠标事件也许是web页面当中最常用到的事件,因 ...