ASP.NET企业开发框架IsLine FrameWork系列之十一--HttpContentProvider 访问缓存

  今天我们来介绍 IsLine.HttpContent.HttpContentProvider命名空间:

  这个Provider主要封装了对缓存、Session与Cooike的操作,该空间下主要有三个类:CookieProvider、SessionProvider、CacheProvider。

  关于约束

  这三个类库统一实现ICapability接口,ICapability继承自IBaseCapability接口,IBaseCapability规范了HttpContentProvider的基础能力,而ICapability则是对基础能力的扩展,如下:

 

代码
namespace IsLine.HttpContent.HttpContentProvider

{

public interface IBaseCapability

{

bool Remove(string Name);

bool IsExit(string Name);

}

public interface ICapability : IBaseCapability

{

object GetContent(string Name);

bool UpdateContent(string Name, object value);

}

}

 

  可以看出,接口主要约束了如何删除、获得与更新一个对象,即约束了Session、Cookie、Cache的行为。

  CacheProvider类

  首先来看看有关Cache的操作,CacheProvider支持.Net两种类型的Cache:运行时Cache(HttpRuntime.Cache)与上下文Cache(HttpContext.Current.Cache),这两种Cache有什么区别呢?这里简单的解释一下:

  HttpRuntime.Cache是Application级别的,而HttpContext.Current.Cache是仅对当前WEB页面请求才有效的。换句话说,HttpRuntime Cache所有的web与非web程序都可以调用,而HttpContext则只能用在WEB中。

  缓存中的数据是易失的,数据并不是在整个应用程序生命周期中都存储在内存中,由 ASP.NET 管理缓存,它会在项过期、无效、或内存不足时移除缓存中的项。还可以配置应用程序缓存,以便在移除项时通知应用程序。所以,你并不知道缓存在什么时候会失效,即使你已经配置了依赖项。

  关于缓存的过期有2种类型:

过期类型

说明

滑动窗口

指定某项自上次被访问后多长时间过期。

绝对过期

指定某项在设定的时间过期,而不考虑访问频率。

    可以将缓存中某一项的生存期配置为依赖于其他应用程序元素,如某个文件或数据库。当缓存项依赖的元素更改时,ASP.NET 将从缓存中移除该项。

CacheProvider类支持以下2种依赖:

说明

文件依赖项

缓存中的项依赖于外部文件。如果该文件被修改或删除,则缓存项也会被移除。

SQL 依赖项

缓存中的项依赖于 Microsoft SQL Server 2005、SQL Server 2000 或 SQL Server 7.0 数据库中表的更改。对于 SQL Server 2005,缓存中的项可依赖于表中的某一行。

 

  使用CacheProvider中的方法

方法

说明

CacheProvider()

构造函数

CacheProvider(string cacheName)

构造函数,参数指明了需要操作的缓存名称

CacheProvider(CacheType useCacheType, string cacheName, CacheDependencyType cdt,object depend)

构造函数,CacheType指明缓存类型,可以是运行时或上下文Cache,默认为运行时Cache;cacheName为需要操作的缓存名称;CacheDependencyType为依赖项类型,可以是sql或文件;

depend为具体依赖项

Object GetContent()

获得默认缓存内容

Object GetContent(string Name)

获得缓存内容,参数指明了需要操作的缓存名称

Bool UpdateContent(object o)

更新或新建默认缓存内容

Bool UpdateContent(string Name,object o)

更新或新建缓存内容,参数指明了需要操作的缓存名称

bool Remove()

移除默认缓存

bool Remove(string Name)

移除缓存,参数指明了需要操作的缓存名称

bool IsExit()

判断默认缓存是否存在

bool IsExit(string Name)

判断缓存是否存在,参数指明了需要操作的缓存名称

 

    缓存依赖项可以以参数方式统一传入,这样方便了开发人员。SQL缓存只针对SQL SERVER数据库有效,指定使用文件缓存还是数据库缓存,可以通过CacheDependencyType参数达到目的,CacheDependencyType是一个枚举值,在IsLine.HttpContent.HCDataTypeEnum命名空间下,IsLine.HttpContent.HCDataTypeEnum命名空间:

 

代码
namespace IsLine.HttpContent.HCDataTypeEnum

{

public enum DateType

{

Days,

Hours,

Years,

Minutes

}


public enum CacheType

{

HttpRuntime,

HttpContext

}



public enum CacheDependencyType

{

Sql,

File,

None

}



public enum RemoveType

{

RemoveInput,

RemoveAllExcludeInput

}

}

 

 

    需要注意的是,即使使用CacheProvider(string cacheName)指明了需要操作的Cache,但是如果后面的代码中,实例调用的方法中包含其他Cache的名称,那么以后使用不带Cache名称参数的方法时,将会操作那个新的Cache,而忽略构造函数中指明的Cache。

例如:

CacheProvider cp = new CacheProvider(“A”);

cp.GetContent();
//这一步将获得Cache“A”的内容

cp.IsExit(“B”)
//这一步检测Cache“B”是否存在

cp.GetContent();
//这一步将获得Cache“B”的内容,而不是构造函数中的Cahce“A”

 

我是李鸣 欢迎您关注我的下一篇文章。

 IsLine FrameWork是一个开源的企业级系统开发框架,目前已有以下系列:

 

IsLine FrameWork系列之一——第一次的亲密接触

IsLine FrameWork系列之二——命名空间与契约

IsLine FrameWork系列之三--七种武器

IsLine FrameWork系列之四--DataProvider 数据访问(上)

IsLine FrameWork系列之五--DataProvider 数据访问(中)

IsLine FrameWork系列之六--DataProvider 数据访问(下)

IsLine FrameWork系列之七--AppLogProvider日志框架(下)

IsLine FrameWork系列之八--ExceptionProcessProvider异常框架(上)

IsLine FrameWork系列之九--ExceptionProcessProvider异常框架(下)

IsLine FrameWork系列之十--HttpContentProvider 访问缓存

 

 

posted on 2010-01-29 11:11  Aicken(李鸣)  阅读(2607)  评论(0编辑  收藏  举报