• 2982 阅读
  • 6 回复

ASPNET缓存Cache综合 [精华帖]

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
本主题由 张小鱼 于 2010/1/7 8:36:00 执行 设置精华 [查看记录]
(您是游客)您没有查看精华帖子的权限
小鱼的淘宝店铺-多多支持哇

asp.net页面缓存技术

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
页面缓存
使用OutputCache指令。
<%@OutputCacheDuration="3600"
       Location="Any"
       VaryByCustom="browser"
       VaryByParam="RequestID"%>
其中Duration和VaryByParam特性是必须的。
Location控制页面缓存的位置
Location
含义
Any
默认值。意味着页面的输出可以缓存在客户端浏览器,缓存在任何“下游”的客户端(如代理服务器),或缓存在Web服务器本身
Client
指明输出缓存只能存储在发出请求的客户端(即浏览器)的本地缓存中
Downstream
指明输出缓存能存储在任何支持HTTP1.1缓存的设备(如代理服务器)中
Server
指明输出缓存将存储在Web服务器上
None
指明该页面禁用输出缓存
Duration允许我们控制页面在缓存中生存的时间(单位是秒)
VaryByParam允许我们缓存页面的不同版本。在上面的例子中,VaryByParam设为了RequestID,所以ASP.NET使用RequestID参数的不同值,这些值或者是在HTTPGET的查询字符串中传入,或者是在HTTPPOST的参数中传入。可以通过检查RequestID参数的值让应用程序区分不同的用户;通过在页面的OutputCache指令中放置VaryByParam="RequestID",可以让ASP.NET为每个用户缓存页面的不同版本。
如果不想根据参数的值缓存页面的不问版本,那么只要把VaryByParam设为none。
也可以要求ASP.NET为每个可能的参数组合缓存页面的一个版本。为此,可把VaryByParam设为*。
VaryByHeader和VaryByCustom特性与VaryByParam的相似之处在于,它们允许指定何时应创建页面新的缓存版本。
VaryByHeader允许我们根据由分号分隔的HTTP头的列表末缓存页面的不向版本。
VaryByCustom当设为browser时,允许我们根据浏览器的名称和主版本信息缓存不同版本。也可以把它设为一个自定义方法的名称,从而实现我们自己的逻辑,控制缓存的版本。
片断缓存
可以利用用户控件将页面分段,在ascx文件中写入缓存的语句,而不在aspx文件中写缓存语句,这样ASP.NET就可以只缓存ascx片断的输出了。一般像页眉或页脚基本上都是一样的,就不需要重新加载。但是如果其中有动态变化的数据就不能对其进行缓存,因为一旦被缓存后程序就不会再创建它的实例来更新数据显示,只有等到生存期过期才行,所以对于这种情况就不适于用页面片断缓存。
注意:
一、注意片段缓存不支持Location特性;缓存页面片段惟一合法的地方是web服务器。这是因为片段缓存在ASP.NET中是新的功能,所以浏览器和代理服务器不支持。
二、片段缓存有另外一个在页面缓存中没有的特性——VaryByControl。VaryByControl特性允许指定一个由分号分隔的字符串列表,代表用户控件内使用的控件的名称;ASP.NET将针对值的每个不同的组合生成用户构件的一个缓存版本。
数据缓存
低级API是Cache类,它位于ASP.NET中的System.web.Caching命名空间,可以用它缓存生成很耗费资源的数据。Cache类的使用和Session与Application对象一样简单。每个应用程序只有一个Cache对象——这意味着使用Cache对象存储在缓存中的数据是应用程序级别的数据。使事情更为简单的是,Page类的Cache属性使应用程序的Cache对象实例能在代码中使用。
通过Cache对象缓存的数据存储在应用程序的内存中。这意味着该数据的生存期不会超过应用程序的重启(事实上,这和存储在Application与Session对象中的数据一样,除非使用StateService或SQLState会话模式存储Session数据)。
具体的使用和语法与Session和Application一样。转换回来的时候需要注意对其进行相应类型的强制类型转换。
这不是在ASP.NET缓存中添加缓存项的惟一方式。Cache对象有两个方法Insert()方法和Add()方法,它们灵活性更高。它们的用法近似,但稍有不同:
Insert()方法用于覆盖ASP.NET缓存中现有的缓存项。
Add()方法只用于在ASP.NET缓存中添加新的缓存项(如果用它覆盖现有的缓存项,则会失败)。
每个方法都有7个参数,而且两个方法的参数相同。
在缓存某一项时,可以指定它的相关性,告诉ASP.NET该缓存项在缓存中一直保留到某个事件发生时为止。
相关性值
含义
CacheDependency
允许指定一个文件或缓存键。如果文件发生变化,对象就被删除。如果缓存键发生变化,对象也被删除。
DateTime
这是一个DataTime值,指明缓存数据过期的时间(绝对过期时间)
TimeSpan
这是一个时间间隔,指明缓存数据在上一次访问后可以在缓存中保留多长时间(弹性过期时间)
使用CacheItemPriority来指定缓存数据的优先级,以便在缓存被填满的时候删除那些优先级低的数据。
优先级值
含义
High
设为此优先级的缓存项是最不可能在内存不足时被删除的
AboveNormal
设为此优先级的缓存项比优先级为Normal或以下的缓存项更优先保留
Normal
设为此优先级的缓存项比优先级为BelowNormal和Low的缓存项更优先保留
BelowNormal
这是倒数第二级的优先级;设为此优先级的缓存项只比优先级设为Low的缓存项更优先保留
Low
设为此优先级的缓存项是最有可能在内存不足时被删除的
Default
缓存项的优先级的默认值是Normal
NotRemovable
当缓存项设为此优先级时,是在告诉ASP.NET即使是内存不足,也不要从缓存中删除它
DateTimedt=newDateTime(DateTime.Now.Year,12,31);
Cache.Add("MembersDataSet",dsMembers,null,
dt,TimeSpan.Zero,
CacheItemPriority.Normal,null);
第一个参数是引用缓存对象的键,第二个参数是要缓存的对象。第三个参数是null(表明没有相关性)。
第四和第五个参数是绝对的过期时间和弹性的过期时间。这里,我们指定缓存应在当前年份的最后一天过期(dt)。我们想指定没有弹性的过期时间,所以第五个参数使用TimeSpan.Zero。第六个参数使用System.Web.Caching.CacheItemPriority枚举中的一个值,把优先级设为Normal。
指定一个5分钟的弹性过期时间,没有指定绝对过期时间
Cache.Add("MembersDataSet",dsMembers,null,
       DateTime.MaxValue,TimeSpan.FromMinutes(5),
     CacheItemPriority.Normal,null);
添加一个相关性。在这个例子中,过期时间也取决于一个文件的修改,即test.xml文件:
CacheDependencydep=newCacheDependency(@"C:\test.xml");
Cache.Add("MembersDataSet",dsMembers,dep,
       DateTime.MaxValue,TimeSpan.FromMinutes(5),
     CacheItemPriority.Normal,null);
过期时间取决于缓存中另一项的修改:
String[]dependencyKeys=newString[1];
dependencyKeys[0]="MembersChanged";
CacheDependencydependency=newCacheDependency(null,dependencyKeys);
Cache.Add("MembersDataSet",dsMembers,dependency,
       DateTime.MaxValue,TimeSpan.Zero,
     CacheItemPriority.Normal,null);
最后一个参数是CacheItemRemovedCallback类型的,允许我们在缓存项从缓存中删除时要求通知,可以编写一个自定义的方法(像这里的ItemRemovedCallback()方法),然后在第7个参数中指定该方法:
publicvoidItemRemovedCallback(Stringkey,Objectvalue,CacheItemRemovedReasonreason)
   {
   }
Cache.Add("MembersDataSet",dsMembers,dependency,
       DateTime.MaxValue,TimeSpan.FromMinutes(5),
     CacheItemPriority.Normal,
newCacheItemRemovedCallback(this.ItemRemovedCallback());
第一个参数是在缓存中存储缓存项时使用的键,第二个是存储的对象本身,第三个是缓存项删除的原因。
本帖最后由 张小鱼 于 2010-01-07 08:24 编辑
小鱼的淘宝店铺-多多支持哇

ASP.NET缓存数据技巧三则

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
ASP.NET使用缓存机制,将需要大量服务器资源来创建的对象存储在内存中。本文介绍在编写ASP.NET应用时可能会用到的三个ASP.NET缓存数据技巧。


ASP.NET缓存数据技巧:访问缓存的值
由于缓存中所存储的信息为易失信息,即该信息可能由 ASP.NET 移除,因此建议先确定该项是否在缓存中。如果不在,则应将它重新添加到缓存中,然后检索该项。

代码 复制 - 运行


string cachedString;  
if (Cache["CacheItem"] != null)  {      
cachedString = (string)Cache["CacheItem"];  
} 
 else
 {        
//缓存不存在时 
     Cache.Insert("CacheItem", "Hello, World.")     
    cachedString = (string)Cache["CacheItem"]; 
 }  



ASP.NET缓存数据技巧:删除缓存项
由于以下任一原因,缓存中的数据可能会自动移除:缓存已满、该项已过期、依赖项发生更改。注意:如果调用 Insert 方法,并向缓存中添加与现有项同名的项,则将从缓存中删除该旧项。显示删除缓存的值:

代码 复制 - 运行


Cache.Remove("MyCacheKey"); 



ASP.NET缓存数据技巧:删除缓存项时通知应用程序
从缓存中移除项时通知应用程序,可能非常有用。例如,可能具有一个缓存的报告,创建该报告需花费大量的时间进行处理。当该报告从缓存中移除时,希望重新生成该报告,并立即将其置于缓存中,以便下次请求该报告时,用户不必等待对此报告进行处理。
ASP.NET 提供了CacheItemRemovedCallback 委托,在从缓存中移除项时能够发出通知。还提供 CacheItemRemovedReason 枚举,用于指定移除缓存项的原因。举例:假设有一个 ReportManager 对象,该对象具有两种方法,即 GetReport 和 CacheReport。GetReport 报告方法检查缓存以查看报告是否已缓存;如果没有,该方法将重新生成报告并将其缓存。CacheReport 方法具有与 CacheItemRemovedCallback 委托相同的函数签名;从缓存中移除报告时,ASP.NET 会调用 CacheReport 方法,然后将报告重新添加到缓存中。
1)创建一个 ASP.NET 网页,该网页将调用类中用于将项添加到缓存中的方法。

代码 复制 - 运行


protected void Page_Load(object sender, EventArgs e)   
{ 
      this.Label1.Text = ReportManager.GetReport(); 
} 


2)创建用于在从缓存中删除项时处理通知的完整类ReportManager。

代码 复制 - 运行


using System;   

using System.Web;   

using System.Web.Caching;   

public static class ReportManager   

{   

    private static bool _reportRemovedFromCache = false;   



    static ReportManager() { }   



    //从缓存中获取项   

    public static String GetReport()   

    {   

        lock (typeof(ReportManager))   

        {   

            if (HttpContext.Current.Cache["MyReport"] != null)   

            {    //存在MyReport缓存项,返回缓存值   

                return (string)HttpRuntime.Cache["MyReport"];   

            }   

            else  

            {   //MyReport缓存项不存在,则创建MyReport缓存项   

                CacheReport();   

                return (string)HttpRuntime.Cache["MyReport"];   

            }   

        }   

    }   



    //将项以 MyReport 的名称添加到缓存中,并将该项设置为在添加到缓存中后一分钟过期。   

    //并且该方法注册 ReportRemoveCallback 方法,以便在从缓存中删除项时进行调用。   

    public static void CacheReport()   

    {   

        lock (typeof(ReportManager))   

        {   

            HttpContext.Current.Cache.Add("MyReport",   

                CreateReport(), null, DateTime.MaxValue,   

                new TimeSpan(0, 1, 0),    

                System.Web.Caching.CacheItemPriority.Default,   

                ReportRemovedCallback);   

        }   

    }   



    //创建报告,该报告时MyReport缓存项的值   

    private static string CreateReport()   

    {   

        System.Text.StringBuilder myReport =    

            new System.Text.StringBuilder();   

        myReport.Append("Sales Report< br />");   

        myReport.Append("2005 Q2 Figures< br />");   

        myReport.Append("Sales NE Region - $2 million< br />");   

        myReport.Append("Sales NW Region - $4.5 million< br />");   

        myReport.Append("Report Generated: " + DateTime.Now.ToString()    

            + "< br />");   

        myReport.Append("Report Removed From Cache: " +    

            _reportRemovedFromCache.ToString());   

        return myReport.ToString();   

    }   



    //当从缓存中删除项时调用该方法。   

    public static void ReportRemovedCallback(String key, object value,    

        CacheItemRemovedReason removedReason)   

    {   

        _reportRemovedFromCache = true;   

        CacheReport();   

    }   

}  



不应在 ASP.NET 页中实现回调处理程序,因为在从缓存中删除项之前该页可能已被释放,因此用于处理回调的方法将不可用,应该在非ASP.NET的程序集中实现回调处理程序。为了确保从缓存中删除项时处理回调的方法仍然存在,请使用该方法的静态类。但是,静态类的缺点是需要保证所有静态方法都是线程安全的,所以使用lock关键字。
本文来自菩提屋:《缓存应用程序数据(二)》


【编辑推荐】
  1. ASP.NET缓存数据添加方法一览
  2. ASP.NET缓存机制基础概念
  3. 再谈ASP.NET缓存机制:开发效率与优化的平衡
  4. .NET分布式缓存之Memcached执行速度检测
  5. 如何避免ASP.NET缓存占用系统资源
小鱼的淘宝店铺-多多支持哇

Asp.Net中Cache操作类

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)

代码 复制 - 运行


/// <head> 
///   <function> 
///    存储类(存储UserInfo信息) 
///   </function> 
///   <description> 
///    用Cache存储用户信息 
///    在指定间隔(TimeOut)内取,则可以从Cache中取, 
///    如果超出存储时间,则从数据库取用户信息数据 
///    作為所有用户信息的存儲類. 
///   </description> 
///   <author> 
///    <name>ChengKing</name>    
///   </author> 
/// </head> 
using System; 
using System.Web; 
using System.Web.Caching; 

namespace Common 
{       
        /// <summary> 
/// 存储类(存储UserInfo信息) 
/// </summary> 
public class Storage 
{ 
   public Storage() 
   { 
    // 
    // TODO: 在此处添加构造函数逻辑 
    // 
   } 

   #region 方法 

   //实现“一键一值”存储方法,最普通的存储方法    
                //(“一键一值”指一个Identify存储一个值,下面还有一个“一键多值”方法,因为有时候需要一个键存储多个变量对象值) 
                public static bool InsertIdentify(string strIdentify,object Info) 
   {    
    if(strIdentify != null && strIdentify.Length != 0 && userInfo != null) 
    { 
     //建立回调委托的一个实例 
      CacheItemRemovedCallback callBack =new CacheItemRemovedCallback(onRemove); 

     //以Identify为标志,将userInfo存入Cache 
     HttpContext.Current.Cache.Insert(strIdentify,userInfo,null,  
          System.DateTime.Now.AddSeconds(300), 
          System.Web.Caching.Cache.NoSlidingExpiration,  
          System.Web.Caching.CacheItemPriority.Default, 
          callBack); 
     return true; 
    }    
    else 
    { 
     return false; 
    } 
   } 

   //判断存储的"一键一值"值是否还存在(有没有过期失效或从来都未存储过) 
                public static bool ExistIdentify(string strIdentify) 
   { 
    if(HttpContext.Current.Cache[strIdentify] != null) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
   } 

                //插入"一键多值"方法 
                //***其中 StorageInfType是一个Enum,里面存有三种类型: UserInf SysInf PageInf  
                //这个枚举如下: 
                /* 
                  public enum StorageInfType 
            { 
        /// <summary>用户信息</summary> 
            UserInf = 0, 

        /// <summary>页面信息</summary> 
        PageInf = 1,   

        /// <summary>系统信息</summary> 
               SysInf = 2 
              } 
                //此枚举是自己定义的.可根据需要定义不同的枚举  
                //加个枚举目的是实现“一键多值”存储方法,事实上Cache中是存放了多个变量的,只不过被这个类封装了, 
                //程序员感到就好像是“一键一值”.   这样做目的是可以简化开发操作,否则程序员要存储几个变量就得定义几个Identify. 
   public static bool InsertCommonInf(string strIdentify,StorageInfType enumInfType,object objValue) 
   {    
    if(strIdentify != null && strIdentify != "" && strIdentify.Length != 0 && objValue != null) 
    { 
     //RemoveCommonInf(strIdentify,enumInfType);  

     //建立回调委托的一个实例 
              CacheItemRemovedCallback callBack =new CacheItemRemovedCallback(onRemove); 

     if(enumInfType == StorageInfType.UserInf) 
     {     
       //以用户UserID+信息标志(StorageInfType枚举),将userInfo存入Cache 
        HttpContext.Current.Cache.Insert(strIdentify+StorageInfType.UserInf.ToString(),objValue,null,  
             System.DateTime.Now.AddSeconds(18000),       //单位秒 
             System.Web.Caching.Cache.NoSlidingExpiration,  
             System.Web.Caching.CacheItemPriority.Default, 
             callBack);   
     } 
     if(enumInfType == StorageInfType.PageInf) 
     { 
      //以用户UserID+信息标志(StorageInfType枚举),将PageInfo存入Cache 
         HttpContext.Current.Cache.Insert(strIdentify+StorageInfType.PageInf.ToString(),objValue,null,  
               System.DateTime.Now.AddSeconds(18000), 
               System.Web.Caching.Cache.NoSlidingExpiration,  
               System.Web.Caching.CacheItemPriority.Default, 
               callBack);   
     } 
     if(enumInfType == StorageInfType.SysInf) 
     { 
      //以用户UserID+信息标志(StorageInfType枚举),将SysInfo存入Cache 
         HttpContext.Current.Cache.Insert(strIdentify+StorageInfType.SysInf.ToString(),objValue,null,  
               System.DateTime.Now.AddSeconds(18000), 
                  System.Web.Caching.Cache.NoSlidingExpiration,  
               System.Web.Caching.CacheItemPriority.Default, 
               callBack);   
     } 
     return true; 
    } 
    return false; 
   } 
                //读取“一键多值”Identify的值 
                public static bool ReadIdentify(string strIdentify,out UserInfo userInfo) 
   { 
    //取出值 
    if((UserInfo)HttpContext.Current.Cache[strIdentify] != null) 
    { 
     userInfo = (UserInfo)HttpContext.Current.Cache[strIdentify]; 
     if(userInfo == null) 
     { 
      return false; 
     } 
     return true; 
    }    
    else 
    { 
     userInfo = null; 
     return false; 
    }    
   } 

   //手动移除“一键一值”对应的值 
                public static bool RemoveIdentify(string strIdentify) 
   { 
    //取出值 
    if((UserInfo)HttpContext.Current.Cache[strIdentify] != null) 
    { 
     HttpContext.Current.Cache.Remove(strIdentify);         
    }    
    return true;   
   } 

                //此方法在值失效之前调用,可以用于在失效之前更新数据库,或从数据库重新获取数据 
   private static void onRemove(string strIdentify, object userInfo,CacheItemRemovedReason reason) 
   { 

   } 

   #endregion 
}  
} 



FROM:http://hi.baidu.com/tycoonzhao/blog/item/3c66848f46527bff503d924e.htm

另一:

代码 复制 - 运行


using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Web.Caching;//需引用 

namespace FishSoft.Common 
{ 
    public class Cache 
    { 


        //系统缓存类 
        //来源 
        //http://blog.3gcms.net/net/ 
        //http://blog.3gcms.net/net/200706/16.htm 
        //http://www.koders.com/csharp/fidE18C1766A854D6B2E5567AB2ECB63DCB973C1CD9.aspx?s=mdef%3ainsert 

        //小鱼修改:2009-04-08 

        //读取====================================== 
        //FishSoft.Common.Cache cache = new FishSoft.Common.Cache(); 
        //cache.CacheItemName = "FishSoft"; 
        //cache.CacheName = "NewsListHtml"; 
        //NewsCache = cache.GetCache(); 
        //if (NewsCache == null) 
        //{ 
        //GetNewsHtml(); 
        //} 
        //else 
        //{ 
        //NewsHtml = NewsCache.ToString(); 
        //} 
        //读取====================================== 

        //写入==================================================== 
        //FishSoft.Common.Cache cache = new FishSoft.Common.Cache(); 
        //cache.CacheItemName = "FishSoft"; 
        //cache.CacheName = "NewsListHtml"; 
        //cache.ExpireTime = 30; 
        //cache.SetCache(NewsHtmlGet.ToString()); 
        //写入==================================================== 



        /// <summary> 
        /// 缓存的名称。 
        /// </summary> 
        protected string strCacheName = "";//缓存名称 

        /// <summary> 
        /// 缓存项目名称。 
        /// </summary> 
        protected string strCacheItemName = "";//缓存项目名称 

        /// <summary> 
        /// 缓存过期时间,单位分钟。 
        /// </summary> 
        protected int intExpireTime = 0;//缓存过期时间,单位分钟(小鱼确定是秒,原来是:AddSeconds换成:AddMinutes即为分钟) 

        /// <summary> 
        /// 缓存类的版本。 
        /// </summary> 
        protected string strVersion = "";//缓存类的版本 

        /// <summary> 
        /// 缓存对象。 
        /// </summary> 
        protected Object objCacheObject = new object();//缓存对象 

        /// <summary> 
        /// 缓存键名称。 
        /// </summary> 
        protected string strCacheKey = "";//缓存键名称 

        /// <summary> 
        /// 缓存最后更新时间。 
        /// </summary> 
        protected string strLastUpdate = "";//缓存最后更新时间 

        /// <summary> 
        /// 操作结果。 
        /// </summary> 
        protected string strResult = "";//操作结果 

        /// <summary> 
        /// Cache 缓存类。 
        /// </summary> 
        public Cache() 
        { 
            // 
            // TODO: 在此处添加构造函数逻辑 
            // 
            strCacheKey = strCacheItemName + "_" + strCacheName; 
            strVersion = "易讯缓存类 Version 2007"; 
        } 

        #region 获得缓存类版本 
        /// <summary> 
        /// 获得缓存类版本。 
        /// </summary> 
        public string Version 
        { 
            get 
            { 
                return strVersion; 
            } 
        } 
        #endregion 

        #region 设置/获得缓存项目 
        /// <summary> 
        /// 设置/获得缓存项目。 
        /// </summary> 
        public string CacheItemName 
        { 
            get 
            { 
                return strCacheItemName; 
            } 
            set 
            { 
                strCacheItemName = value; 
                strCacheKey = strCacheItemName + "_" + strCacheName; 
            } 
        } 
        #endregion 

        #region 设置/获得缓存名称 
        /// <summary> 
        /// 设置/获得缓存名称。 
        /// </summary> 
        public string CacheName 
        { 
            get 
            { 
                return strCacheName; 
            } 
            set 
            { 
                strCacheName = value; 
                strCacheKey = strCacheItemName + "_" + strCacheName; 
            } 
        } 
        #endregion 

        #region 设置缓存过期时间间隔 
        /// <summary> 
        /// 设置缓存过期时间间隔。 
        /// </summary> 
        public int ExpireTime 
        { 
            get 
            { 
                return intExpireTime; 
            } 
            set 
            { 
                intExpireTime = value; 
            } 
        } 
        #endregion 

        #region 获得缓存最后更新时间 
        /// <summary> 
        /// 获得缓存最后更新时间。 
        /// </summary> 
        public string getLastUpDatetime 
        { 
            get 
            { 
                if (System.Web.HttpContext.Current.Cache[strCacheKey + "_UpDateTime"] != null) 
                { 
                    return System.Web.HttpContext.Current.Cache[strCacheKey + "_UpDateTime"].ToString(); 
                } 
                else 
                { 
                    return ""; 
                } 
            } 
        } 
        #endregion 

        #region 获得缓存过期时间 
        /// <summary> 
        /// 读取缓存过期时间。 
        /// </summary> 
        public string getLostTime 
        { 
            get 
            { 
                if (System.Web.HttpContext.Current.Cache[strCacheKey + "_LostDateTime"] != null) 
                { 
                    return System.Web.HttpContext.Current.Cache[strCacheKey + "_LostDateTime"].ToString(); 
                } 
                else 
                { 
                    return ""; 
                } 
            } 
        } 
        #endregion 

        #region 保存对象到缓存中 
        /// <summary> 
        /// 保存对象到缓存中。 
        /// </summary> 
        public void SetCache(object objContent) 
        { 
            if (CheckParameter() == false) return; 
            lock (objCacheObject) 
            { 
                DateTime Dt = DateTime.Now; 
                System.Web.HttpContext.Current.Cache.Insert(strCacheKey, objContent, null, Dt.AddMinutes(intExpireTime), System.TimeSpan.Zero); 
                System.Web.HttpContext.Current.Cache.Insert(strCacheKey + "_UpDateTime", Dt.ToString(), null, Dt.AddMinutes(intExpireTime), System.TimeSpan.Zero); 
                System.Web.HttpContext.Current.Cache.Insert(strCacheKey + "_LostDateTime", Dt.AddMinutes(intExpireTime), null, Dt.AddMinutes(intExpireTime), System.TimeSpan.Zero); 
            } 
        } 
        #endregion 

        #region 从缓存中取出对象 
        /// <summary> 
        /// 从缓存中取出对象。 
        /// </summary> 
        public object GetCache() 
        { 
            if (CheckParameter() == false) return null; 
            lock (objCacheObject) 
            { 
                if (System.Web.HttpContext.Current.Cache[strCacheKey] != null) 
                { 
                    return System.Web.HttpContext.Current.Cache[strCacheKey]; 
                } 
                else 
                { 
                    return null; 
                } 
            } 
        } 
        #endregion 

        #region 从缓存中清空对象 
        /// <summary> 
        /// 从缓存中清空对象。 
        /// </summary> 
        public void Clear() 
        { 
            if (CheckParameter() == false) return; 
            lock (objCacheObject) 
            { 
                if (System.Web.HttpContext.Current.Cache[strCacheKey] != null) 
                { 
                    System.Web.HttpContext.Current.Cache.Remove(strCacheKey); 
                } 
                if (System.Web.HttpContext.Current.Cache[strCacheKey + "_UpDateTime"] != null) 
                { 
                    System.Web.HttpContext.Current.Cache.Remove(strCacheKey + "_UpDateTime"); 
                } 
                if (System.Web.HttpContext.Current.Cache[strCacheKey + "_LostDateTime"] != null) 
                { 
                    System.Web.HttpContext.Current.Cache.Remove(strCacheKey + "_LostDateTime"); 
                } 
            } 
        } 
        #endregion 

        #region 缓存对象是否有效 
        /// <summary> 
        /// 缓存对象是否有效。 
        /// </summary> 
        public bool ValidCache() 
        { 
            if (CheckParameter() == false) return false; 
            lock (objCacheObject) 
            { 
                if (System.Web.HttpContext.Current.Cache[strCacheKey] == null) 
                { 
                    return false; 
                } 
                else 
                { 
                    return true; 
                } 
            } 
        } 
        #endregion 

        #region 获得缓存操作结果 
        /// <summary> 
        /// 获得缓存操作结果。 
        /// </summary> 
        public string getResult 
        { 
            get 
            { 
                return strResult; 
            } 
        } 
        #endregion 

        #region 检查缓存参数 
        /// <summary> 
        /// 检查缓存参数。 
        /// </summary> 
        public bool CheckParameter() 
        { 
            if (strCacheItemName == "") 
            { 
                strResult = "缓存项目名称为空"; 
                return false; 
            } 
            if (strCacheName == "") 
            { 
                strResult = "缓存名称为空"; 
                return false; 
            } 
            return true; 
        } 
        #endregion 


        #region 清除所有缓存/显示所有缓存 小鱼加 
        /// <summary> 
        /// 清除所有缓存 
        /// </summary> 
        public void RemoveAllCache() 
        { 
            //show(); 

           System.Web.Caching.Cache _cache =  System.Web.HttpRuntime.Cache; 
           System.Collections.IDictionaryEnumerator CacheEnum = _cache.GetEnumerator(); 
           System.Collections.ArrayList al = new System.Collections.ArrayList(); 
            while (CacheEnum.MoveNext()) 
            { 
                al.Add(CacheEnum.Key); 
            } 


            lock (objCacheObject) 
            { 
                //if (System.Web.HttpContext.Current.Cache[strCacheKey] != null) 
                //{ 
                //    System.Web.HttpContext.Current.Cache.Remove(strCacheKey); 
                //} 
                //if (System.Web.HttpContext.Current.Cache[strCacheKey + "_UpDateTime"] != null) 
                //{ 
                //    System.Web.HttpContext.Current.Cache.Remove(strCacheKey + "_UpDateTime"); 
                //} 
                //if (System.Web.HttpContext.Current.Cache[strCacheKey + "_LostDateTime"] != null) 
                //{ 
                //    System.Web.HttpContext.Current.Cache.Remove(strCacheKey + "_LostDateTime"); 
                //} 
                foreach (string key in al) 
                { 
                    _cache.Remove(key); 
                } 
            } 

        } 
        /// <summary> 
        /// 清除所有缓存 
        /// </summary> 
        public void show() 
        { 
            string str = ""; 
            System.Collections.IDictionaryEnumerator CacheEnum = System.Web.HttpRuntime.Cache.GetEnumerator(); 

            while (CacheEnum.MoveNext()) 
            { 
                str += "缓存名<b>[" + CacheEnum.Key + "]</b><br />"; 
            } 
            System.Web.HttpContext.Current.Response.Write("当前网站总缓存数:" + System.Web.HttpRuntime.Cache.Count + "<br />" + str); 
        } 
        #endregion 
    } 


} 

本帖最后由 张小鱼 于 2010-01-07 08:34 编辑
小鱼的淘宝店铺-多多支持哇

收集网址列表

视频在线上传+队列转换FLV+水印+捉图+修复+获时+转3GP(API语言不限,开视频站必备!)
ASP.NET 中 Cache 丢失的问题 (将Cache用Application代替)
http://www.xianfen.net/Article30.aspx
(GOOGL有好多说明)
http://www.google.cn/search?hl=zh-CN&source=hp&q=ASP.NET+%E4%B8%AD+Cache+%E4%B8%A2%E5%A4%B1&btnG=Google+%E6%90%9C%E7%B4%A2&aq=f&oq=

Asp.net 2.0 中 Cache 丢失的问题:“值不能为空”或“未将对象引用设置到对象的实例” (是问题所在?)
http://dotnet.itpub.net/post/20969/323493

与我有相同问题的(解决)**********************************8
http://topic.csdn.net/t/20050428/17/3974168.html
如果要利用   Cache   所提供的清理、到期时间和依赖项支持,则必须使用   Cache.Insert   方法或   Cache.Add   方法。  
 Cache.Insert("MyData1",   connectionString,   null,   NoAbsoluteExpiration,   TimeSpan.FromSeconds(30));  

 Cache.Add("MyData1",   connectionString,   null,   NoAbsoluteExpiration,   TimeSpan.FromSeconds(30),   CacheItemPriority.High,   null);  

 您可以使用   absoluteExpiration   parameter   参数和   slidingExpiration   参数将设有到期策略的项添加到   Cache   中。您可以定义绝对过期时间或弹性过期时间,但不能同时定义两者。在使用上述参数之一定义到期策略时,必须将另一个参数设置为零。Cache   类定义了两个自动执行该操作的字段:NoAbsoluteExpiration   和   NoSlidingExpiration。当定义绝对或弹性过期时间时,只要将适当的参数设置为其相应的字段值即可。下面的示例使用   Insert   方法将设有两分钟绝对到期时间的项添加到   Cache   中。    

 当设置绝对到期时间时,请使用   DateTime   结构。当设置弹性过期时间时,请使用   TimeSpan   结构。另外,如果您创建的弹性过期时间小于零或大于一年,则将引发   ArgumentOutOfRangeException   类。  
************************************************************
http://msdn.microsoft.com/zh-cn/library/ms972417.aspx



http://zhangx00.blog.hexun.com/27913785_d.html
.net中Cache管理操作
http://www.xuexi123.net/post/28.html
Asp.Net中Cache操作类(转)
http://www.cnblogs.com/cuihongyu3503319/archive/2008/05/16/1200848.html
http://blog.csdn.net/heyu1000/archive/2008/09/14/2875232.aspx
http://blog.miniasp.com/post/2009/08/SystemWebHttpRuntimeCache-Code-Snippet.aspx(不错)
http://read.pudn.com/downloads128/sourcecode/windows/csharp/543736/dnt2_n2_src/Source%20Code/Discuz.Cache/DefaultCacheStrategy.cs__.htm
ASP & ASP.NET 网站性能设计之Cache动态使用
http://www.frontfree.net/Articles/420.html  太好了
ASP.NET缓存使用中的几点建议
http://developer.51cto.com/art/200907/137908.htm
ASP.NET2.0的缓存控件和地址映射( 这里说得比较清楚)
网址:http://www.haoxiai.net/wangzhanzhizuo/aspnet/54413.html
好多文章相关列表
http://www.360doc.com/relevant/090324/15/32573_2903638.html
这篇说的对:
http://www.360doc.com/content/080815/11/63890_1543697.html
  关键字:指定一个5分钟
asp.net 读写cache 缓存 (清楚)
http://hi.baidu.com/zdzcool/blog/item/08f071a3a19242a4cbefd0dd.html
在asp.net中如何管理cache (重要)
http://www.cnblogs.com/aspnet2008/archive/2008/10/09/1307370.html

asp.net 缓存读取数据
http://hi.baidu.com/huangguizhong/blog/item/15316281efd846d0bd3e1e0d.html
ASP.NET中缓存服务器的建立
http://dotnet.chinaitlab.com/ASPNET/788282.html
深入理解 ASP.NET 与客户端缓存 (Part 2 - ASP.NET 支持)
http://blog.csdn.net/octverve/archive/2008/01/31/2075402.aspx
ASP.NET 缓存:方法和最佳实践 (cache)
http://blog.csdn.net/xiaoxiaohai123/archive/2008/04/24/2324128.aspx
企业库缓存应用程序块和ASP.net的缓存,过期检查功能比较
http://www.qqread.com/aspdotnet/q396467.html
在ASP.NET Atlas中调用Web Service—应用Cache减小服务器开销
http://www.downcodes.com/info/2009/06/30/20090630-5994.html
小鱼的淘宝店铺-多多支持哇
小鱼的淘宝店铺-多多支持哇
小鱼的淘宝店铺-多多支持哇