首页 > 代码库 > 缓存技术
缓存技术
为什么要使用缓存
缓存位置:缓存到客户端\缓存到服务器端\缓存到代理服务器
缓存技术
为ASPX页面添加OutPutCach指令
OutputCache指令必须至少包含:Duration和VaryByParam两个参数.
Duration:用于设置页面缓存的失效时间(以秒为单位)
VaryByParam:根据客户端Post或Get方式发送的请求参数不同,缓存不同的页面结果.如果提交的参数包含多个,那么参数与参数之间用分号(;)隔开.
注意:如果不需要根据任何条件来缓存页面,那么只需要将VaryByParam属性设置为none.
下面的示例演示了如何根据不同的查询条件缓存不同的页面结果:
页面局部缓存
只缓存页面的一部分区域
方案一:控件缓存
此种情况适用于页面中部分区域很少或基本不会更新.具体做法就是:将这部分区域做成用户控件,在用户控件中添加缓存指令(OutputCache).
方案二:缓存后替换
方案二正好和方案一适用的情况相反.具体实现就是使用服务器控件:Substitution.
该控件使用要点:
- 设置其MethodName属性(该属性的值为后台的一个C#方法名称).
- 该方法必须是静态方法
- 该方法必须返回一个string类型的结果(string的值就是界面上要显示的内容)
- 该方法包含一个类型为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工具的实现步骤:
- 打开命令行工具(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 表名
- 在应用程序中打开配置文件(Web.config|app.Config)
在system.web节点下,添加caching子节点
- 在应用程序对缓存的数据使用数据库缓存依赖.
主要使用到了SqlCacheDependency类.
强调:如果缓存的业务数据来源于多张数据表,那么需要使用AggregateCacheDependency类.
缓存技术