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

资料一:
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. Map 的 key、value 是否允许为null

    Map的key和value是否允许null? 直接写程序验证一下: import java.util.HashMap; import java.util.Hashtable; import java. ...

  2. Maven到底是个啥玩意

    Maven,是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. 上面是百度百科对Maven的正式介绍,如果你是Maven初学者,我估计你看完之后心中肯 ...

  3. 利用pycharm远程调试openstack代码

    1.安装pycharm专业版 本文安装pycharm 2016.2.3专业版.网上教程较多,这里不做详细介绍,只要到pycharm官网上下载应用程序进行安装即可. 2.pycharm配置 (1)首先按 ...

  4. 【hdu1705】Count the grid(皮克定理)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1705 [题意] 给出平面上三个点坐标,求围成的三角形内部的点数 做这道题需要先了解下皮克定理. 百度百科: ...

  5. 剑指offer--24.树的子结构

    时间限制:1秒 空间限制:32768K 热度指数:407165 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   class Solution ...

  6. L127

    Biggest Studies on Aspirin Show Risks Outweigh Benefits for Many People Doctors have long recommende ...

  7. 【SQL查询】按照多个字段进行排序_order by

    注: 1. 当前面的排序存在重复的项,后面的排序才会起作用. [示例1]:前面的排序不存在重复的项 [示例2]:前面的排序存在重复的项

  8. Tomcat应用服务器被黑客 肉鸡攻击 记录

    线上一台应用服务器报警,负载过高,这个就诡异了,因为只是一个普通的服务器,应用使用人员不到10个人,咋会负载高,肯定有问题哪,登陆上去查看, top查看哪个占据的cpu资源比较多 [root@aew0 ...

  9. Leetcode 1006. Clumsy Factorial

    class Solution(object): def clumsy(self, N): """ :type N: int :rtype: int "" ...

  10. [STM32]HardFault 定位办法

    网上关于HardFault的定位办法好多,试到了其中一种可行的 http://www.cnblogs.com/Ilmen/p/3356147.html 特此纪录.