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”
复制代码

 本文转自Aicken(李鸣)博客园博客,原文链接:http://www.cnblogs.com/isline/archive/2010/01/29/1659066.html,如需转载请自行联系原作者

相关文章
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
290 0
|
存储 缓存
.NET 6中Startup.cs文件注入本地缓存策略与服务生命周期管理实践:AddTransient, AddScoped, AddSingleton。
记住,选择正确的服务生命周期并妥善管理它们是至关重要的,因为它们直接影响你的应用程序的性能和行为。就像一个成功的建筑工地,工具箱如果整理得当,工具选择和使用得当,工地的整体效率将会大大提高。
425 0
|
人工智能 自动驾驶 机器人
D1net阅闻|国务院国资委部署深化中央企业“AI+”专项行动
D1net阅闻|国务院国资委部署深化中央企业“AI+”专项行动
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
604 2
|
SQL 存储 关系型数据库
C#一分钟浅谈:使用 ADO.NET 进行数据库访问
【9月更文挑战第3天】在.NET开发中,与数据库交互至关重要。ADO.NET是Microsoft提供的用于访问关系型数据库的类库,包含连接数据库、执行SQL命令等功能。本文从基础入手,介绍如何使用ADO.NET进行数据库访问,并提供示例代码,同时讨论常见问题及其解决方案,如连接字符串错误、SQL注入风险和资源泄露等,帮助开发者更好地利用ADO.NET提升应用的安全性和稳定性。
968 6
|
缓存 NoSQL Java
【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
【Azure Redis 缓存 Azure Cache For Redis】Redis出现 java.net.SocketTimeoutException: Read timed out 异常
372 5
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
272 3
|
算法 Java 测试技术
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
2604 1
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常
【Azure Redis 缓存】Redisson 连接 Azure Redis出现间歇性 java.net.UnknownHostException 异常
802 1
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
319 1