Cache类缓存

此处主要总结System.Web.Caching.Cache类 该类是用于存储常用信息的类,HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例。

该类的成员如下:

1、属性

属性 说明
Count 获取存储在缓存中的项数。
EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比。
EffectivePrivateBytesLimit 获取可用于缓存的字节数。
Item 获取或设置指定键处的缓存项。

2、方法

方法名称 说明
Add 将指定项添加到 Cache 对象,该对象具有依赖项、到期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)。
Get 从 Cache 对象检索指定项。
GetEnumerator 检索用于循环访问包含在缓存中的键设置及其值的字典枚举数。
Insert(String, Object) 向 Cache 对象插入项,该项带有一个缓存键引用其位置,并使用 CacheItemPriority 枚举提供的默认值。
Insert(String, Object, CacheDependency) 向 Cache 中插入具有文件依赖项或键依赖项的对象。
Insert(String, Object, CacheDependency, DateTime, TimeSpan) 向 Cache 中插入具有依赖项和到期策略的对象。
Insert(String, Object, CacheDependency, DateTime, TimeSpan, CacheItemUpdateCallback) 将对象与依赖项、到期策略以及可用于在从缓存中移除项之前通知应用程序的委托一起插入到 Cache 对象中。
Insert(String, Object, CacheDependency, DateTime, TimeSpan, CacheItemPriority, CacheItemRemovedCallback) 向 Cache 对象中插入对象,后者具有依赖项、到期和优先级策略以及一个委托(可用于在从 Cache 移除插入项时通知应用程序)。
Remove 从应用程序的 Cache 对象移除指定项。

3、静态字段

名称 说明
NoAbsoluteExpiration  用于 Insert 方法调用中的 absoluteExpiration 参数中以指示项从不到期。 此字段为只读。
NoSlidingExpiration 用作 Insert 或 Add 方法调用中的 slidingExpiration 参数,以禁用可调到期。 此字段为只读。

4、应用举例

1、基本

namespace WebApplication1
  {
    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 = "诸葛亮";

Cache cache =
HttpRuntime.Cache;
            cache.Insert("AA",p);
           
cache.Insert("BB","字符串");
           
           
Response.Write(cache.Get("BB").ToString());     //输出 字符串
            Person
p2 = cache["AA"] as Person;
            Response.Write(p2.Id + " : " +
p2.Name);        //输出 1 : 诸葛亮
           
Response.Write(cache.EffectivePrivateBytesLimit);   //-1
这是一个只读属性,那就没什么好说了,只能输出来看看了,但是-1是什么意思呢?无限吗
           
Response.Write(cache.EffectivePercentagePhysicalMemoryLimit);   //98   
开始移除项之前可以使用到98%

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

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

foreach (var obj in cache)
           
{
                Response.Write(obj.GetType() + "<br/>");   
//输出不知道什么鸟东西
            }
        }
    }

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

public string Name
        {
           
get;
            set;
        }
    }
    }

2、文件缓存依赖

当被依赖的文件更改时,缓存会立即被清空:

index.aspx.cs代码:

public partial class _Default : System.Web.UI.Page
    
{
        protected void Page_Load(object sender, EventArgs e)
       
{
            Cache cache = HttpContext.Current.Cache;
           
//文件缓存依赖
            cache.Insert("CC", "依赖项测试", new
CacheDependency(@"D:\123.txt"));
           
//这时候在about.aspx页面添加一行代码,当更改一下D:123.txt时,cache["cc"]会立即被清空
        }
    
}

about.aspx.cs代码:

public partial class About : System.Web.UI.Page
    
{
        protected void Page_Load(object sender, EventArgs e)
       
{
            //直接打开本页面,输出缓存依赖项测试
           
//当更改D:\123.txt之后,在刷新,输出空,表明该Cache是依赖于D:\123.txt的
           
Response.Write(HttpContext.Current.Cache["CC"]);
        }
     }

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

下面来看下绝对过期时间的示例,index.aspx.cs:

public partial class _Default : System.Web.UI.Page
    
{
        protected void Page_Load(object sender, EventArgs e)
       
{
            Cache cache = HttpContext.Current.Cache;
           
//5秒后就到期,立即移除,没商量
            cache.Insert("DD", "绝对过期测试", null,
DateTime.Now.AddSeconds(5),
System.Web.Caching.Cache.NoSlidingExpiration);
        }
     }

about.aspx.cs:

public partial class About : System.Web.UI.Page
    
{
        protected void Page_Load(object sender, EventArgs e)
       
{
            //先打开index.aspx添加到缓存 然后立即打开本页面,输出 绝对过期测试
           
//持续刷新5秒后,不会再输出  绝对过期测试
           
Response.Write(HttpContext.Current.Cache["DD"]);
        }
     }

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

滑动过期测试,index.aspx.cs:

public partial class _Default :
System.Web.UI.Page
      {
        protected void Page_Load(object sender,
EventArgs e)
        {
            Cache cache =
HttpContext.Current.Cache;
            //弹性过期时间,当缓存没使用10秒就过期
           
cache.Insert("DD", "滑动过期测试", null,
System.Web.Caching.Cache.NoAbsoluteExpiration,TimeSpan.FromSeconds(10));
       
}
     }

about.aspx.cs:

public partial class About : System.Web.UI.Page
   
{
        protected void Page_Load(object sender, EventArgs e)
       
{
            //直接打开本页面,输出弹性过期测试
           
//如果一直不停地刷新,都会继续输出,但是当超过10秒后再刷新,不会再输出   滑动缓存测试
           
Response.Write(HttpContext.Current.Cache["DD"]);
        }
    }

注意   当设置绝对到期时间时,请使用
DateTime 结构。当设置弹性过期时间时,请使用 TimeSpan 结构。另外,如果您创建的弹性过期时间小于零或大于一年,则将引发
ArgumentOutOfRangeException 类。

时间: 2024-08-04 09:14:19

Cache类缓存的相关文章

System.Web.Caching.Cache类 缓存 各种缓存依赖

System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的项数. EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比. EffectivePrivateBytesLimit 获取可用

System.Web.Caching.Cache类 缓存 各种缓存依赖(转)

转自:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例.尽量使用前者. 一.属性 属性 说明 Count 获取存储在缓存中的项数. EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物

System.Web.Caching.Cache类 Asp.Net缓存 各种缓存依赖

Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.Cache都是该类的实例. 一.属性 属性 说明 Count 获取存储在缓存中的项数. EffectivePercentagePhysicalMemoryLimit 获取在 ASP.NET 开始从缓存中移除项之前应用程序可使用的物理内存百分比. EffectivePrivateBytesLimit 获取可用于缓存的字节数. Item 获取或设置指定键处的缓存项. 二.方法 方法

Mybatis源码分析之Cache二级缓存原理 (五)

一:Cache类的介绍 讲解缓存之前我们需要先了解一下Cache接口以及实现MyBatis定义了一个org.apache.ibatis.cache.Cache接口作为其Cache提供者的SPI(ServiceProvider Interface) ,所有的MyBatis内部的Cache缓存,都应该实现这一接口 Cache的实现类中,Cache有不同的功能,每个功能独立,互不影响,则对于不同的Cache功能,这里使用了装饰者模式实现. 看下cache的实现类,如下图: 1.FIFOCache:先进

android NDK 实用学习(四)-类缓存

1,为什么需要类缓存: 答:由于频繁的查找类及类成员变量需要很大的时间与空间开销,可参考如下文章: http://www.ibm.com/developerworks/cn/java/j-jni/ http://www.28im.com/java/a2379737.html 2,缓存时需要在java类使用static,如下: 1 package com.dasea.test.core; 2 public class TestSetData { 3 // 主要是类ID和字段ID,方法ID的缓存 4

Linux的Cache Memory(缓存内存)机制

转:https://blog.csdn.net/kaikai_sk/article/details/79177036 PS:为什么Linux系统没运行多少程序,显示的可用内存这么少?其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory. 为什么Linux系统没运行多少程序,显示的可用内存这么少?其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做Cache Memory. 有时候你会发现没有什么程序在运行,但是使用top或f

基于 request cache 请求缓存技术优化批量商品数据查询接口_一点课堂(多岸学院)

基于 request cache 请求缓存技术优化批量商品数据查询接口 Hystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓存. 首先,有一个概念,叫做 Request Context 请求上下文,一般来说,在一个 web 应用中,如果我们用到了 Hystrix,我们会在一个 filter 里面,对每一个请求都施加一个请求上下文.就是说,每一次请求,就是一次请求上下文.然后在这次请求上下文中,我们会去执行 N 多代码,调用 N 多依赖服务,有的

PhoneGap 与 Application Cache应用缓存

一个想法      在研究 PhoneGap 的时候一直在想一个问题,怎么提高移动网络下的网络性能?特别是静态文件,多次加载完全是浪费.HTTP 协议中控制缓存也比较纠结,总会有个 304 请求,而且各种协议,各种 HTTP header,都不统一.而且 304 实际上也是进行了一次 HTTP 请求的.      因为用的是 PhoneGap,可以用 Navtive Code 来进行扩展,所以想到一个点子,是否能有一个静态文件升级功能?远程有一个文件标记着静态文件包的最新版本,如果有更新,这个插

libsvm代码阅读(3):关于Cache类的分析(转)

下面来分析Cache类的源码,该类位于svm.cpp中.这个类的主要功能是:负责运算所涉及的内存管理,包括申请.释放等. 简单来说:这个Cache类,首先通过Cache构造函数申请一块空间,这块空间的大小是:L个head_t大小的空间.然后get_data函数保证结构head_t中至少有len个float的内存,并且将可以使用的内存块的指针放在data指针中:而swap_index函数则是用于交换head[i]和head[j]. Cache类的定义如下: [cpp]       view pla