首页 > 代码库 > 缓存技术

缓存技术

为什么要使用缓存

缓存位置:缓存到客户端\缓存到服务器端\缓存到代理服务器

 

 

 缓存技术

为ASPX页面添加OutPutCach指令

 

OutputCache指令必须至少包含:Duration和VaryByParam两个参数.

Duration:用于设置页面缓存的失效时间(以秒为单位)

VaryByParam:根据客户端Post或Get方式发送的请求参数不同,缓存不同的页面结果.如果提交的参数包含多个,那么参数与参数之间用分号(;)隔开.

注意:如果不需要根据任何条件来缓存页面,那么只需要将VaryByParam属性设置为none.

下面的示例演示了如何根据不同的查询条件缓存不同的页面结果:


 

页面局部缓存

只缓存页面的一部分区域

方案一:控件缓存

此种情况适用于页面中部分区域很少或基本不会更新.具体做法就是:将这部分区域做成用户控件,在用户控件中添加缓存指令(OutputCache).

 

 

 

 

方案二:缓存后替换

方案二正好和方案一适用的情况相反.具体实现就是使用服务器控件:Substitution.

该控件使用要点:

  1. 设置其MethodName属性(该属性的值为后台的一个C#方法名称).
  2. 该方法必须是静态方法
  3. 该方法必须返回一个string类型的结果(string的值就是界面上要显示的内容)
  4. 该方法包含一个类型为HttpContext的参数

(通过HttpContext可以获取Response\Request\Server\Session)

 

 

缓存业务数据与缓存依赖

缓存业务数据是指将系统中频繁使用的业务数据缓存到内存中,以便在以后随时使用.(IIS重启可能会导致缓存的业务数据丢失).缓存中可以存储任何类型的数据(object).并且是以键值对的形式存储.

缓存业务数据主要使用了Cache类,它提供了2个方法添加缓存

Cache.Add(..., ..., ..., ...)

Cache.Insert():提供了多种重载形式,可以供多种环境使用.

 

 

通过设置缓存的相对过期时间和绝对过期时间,可以解决内存中缓存的数据越来越多的问题.

 

如何解决数据源更新后, 缓存中的数据自动失效的问题?

 

 

数据库缓存依赖

当缓存的业务数据来源于数据库时,并且当数据库中相应的数据表记录发生改变(增\修\删)后,缓存的业务数据也将自动失效,并从缓存中被移除.

 

实现数据库缓存以来有两种方法配置SQLServer:

一 使用aspnet_regsql命令行工具,

二 使用SqlCacheDependencyAdmin类(略)。

 

例如:

aspnet_regsql -S "server" -E -d "database" –ed  或者

aspnet_regsql -S "server" -E -d "database" -et -t "table"

如果是Sql验证的话要把-E换成,-U (用户名),-P (密码)

 

以下是该工具的命令参数说明:

-? 显示该工具的帮助功能;

-S 后接的参数为数据库服务器的名称或者IP地址;

-U 后接的参数为数据库的登陆用户名;

-P 后接的参数为数据库的登陆密码;

-E 使用当前登录用户的 Windows 集成认证进行身份验证。

-d 后接参数为对哪一个数据库采用SqlCacheDependency功能;

-C 连接数据库的连接字符串。如果您指定服务器(-S)和登录(-U和-P,或 -E)信息,则此选项不是必需的,因为连接字符串已经包含这些信息。

-t 后接参数为对哪一个表采用SqlCacheDependency功能;

-ed 允许对数据库使用SqlCacheDependency功能;

-dd 禁止对数据库采用SqlCacheDependency功能;

-et 允许对数据表采用SqlCacheDependency功能;

-dt 禁止对数据表采用SqlCacheDependency功能;

-lt 列出当前数据库中有哪些表已经采用sqlcachedependency功能。

 

 

使用aspnet_regsql工具的实现步骤:

  1. 打开命令行工具(vs2010命令行工具),并为相应的数据表启用SQL缓存依赖

aspnet_regsql  -S  ip  -U  sa  -P  123456  -ed  -d  databaseName  -et  -t  表名

aspnet_regsql  –S  ip  -E  -ed  -d  databaseName  -et  -t  表名

  1. 在应用程序中打开配置文件(Web.config|app.Config)

在system.web节点下,添加caching子节点

 

  1. 在应用程序对缓存的数据使用数据库缓存依赖.

主要使用到了SqlCacheDependency类.

 

强调:如果缓存的业务数据来源于多张数据表,那么需要使用AggregateCacheDependency类.

 

 

缓存技术