ASP.NET 2.0 缓存技术 (原创)-阿里云开发者社区

开发者社区> 开发与运维> 正文

ASP.NET 2.0 缓存技术 (原创)

简介:

一、SQL Cache 通过配置数据库连接池,只有当数据库数据被改变的时候,缓存才会改变:
          注册连接池 命令:c:\dir aspnet_regsql.exe 专门注册连接池的工具 在sql数据库的数据库改变了,才改变缓存。
         参数: _s 制定注册的服务器、   _e  说明是windows授权模式、 _u和 _p 说明是sql数据库的授权模式、
          _d 指定数据库的名字、_ed 说明缓存生效。
          事例1、   aspnet_regsql.exe _s "\sqlexpress" _e  _d "pubs" _ed  注册到pubs库
         事例2. aspnet_regsql.exe _s "\sqlexpress" _e  _d "pubs" _et _1 "authors" 注册到pubs库的表
         <%@ outputcache duuation="999999" sqldependency="pubs;authors" varybyparam="none"%>在页面中加入
        注意:注册的库不要太多,主要的经常用的注册 最好在两个库以内,也不需要每个库中的的表都注册
二、Output Caching 
      1、 <%@ OutputCache Duration="60" VaryByParam="none" %> 页面的前面加这句就可以
      2、 Duration  缓存的间隔时间   VaryByParam   request是否有返回参数改变
      3、 根据参数缓存  <%@ OutputCache Duration="60" VaryByParam="state" %>
             <SelectParameters>
                <asp:QueryStringParameter Name="state" QueryStringField="state" DefaultValue="CA" />
            </SelectParameters>  这个是在dataview 中设置的
      4、缓存到硬盘 <%@ OutputCache Duration="3600" VaryByParam="name" DiskCacheable="true" %> 
            DiskCacheable 是设置缓存到硬盘
      5、回调缓存  一个页面一部分需要缓存而其他的不需要缓存,实现动态缓存

ExpandedBlockStart.gif  <%@ OutputCache Duration="60" VaryByParam="none" %>
ExpandedBlockStart.gif       
<script runat="server">
InBlock.gif        Shared Function GetCurrentDate(ByVal context As HttpContext) As String
InBlock.gif        Return Now.ToString()
InBlock.gif        End Function
ExpandedBlockEnd.gif    
</script>
None.gif       
<p>
None.gif            
<b>Real Time:
None.gif                
<asp:Substitution ID="Substitution1" runat="server" MethodName="GetCurrentDate" />
None.gif            
</b>
None.gif        
</p>
     6、用户控件 的参数缓存
ExpandedBlockStart.gif <%@ OutputCache Duration="60" VaryByControl="pickstate" %>
None.gif       
<SelectParameters>
None.gif            
<asp:ControlParameter ControlID="pickstate" DefaultValue="CA" Name="state" PropertyName="SelectedValue" />
None.gif        
</SelectParameters>
三、Fragment Caching
       API缓存,比较复杂,一般不采用这中方法
       API回调缓存
ExpandedBlockStart.gif <script runat="server">
InBlock.gif
InBlock.gif            Shared Function GetCurrentDate(context As HttpContext) As String
InBlock.gif
InBlock.gif             
return DateTime.Now.ToString()
InBlock.gif             End Function
InBlock.gif
ExpandedBlockEnd.gif         
</script>
None.gif          
<b>   
ExpandedBlockStart.gif           Real Time: 
<% Response.WriteSubstitution(New HttpResponseSubstitutionCallback(AddressOf GetCurrentDate)) %>
四、Data Caching  dataset
ExpandedBlockStart.gif<script runat="server">
InBlock.gif    Sub Page_Load(ByVal Src As Object, ByVal E As EventArgs)
InBlock.gif        Dim Source As DataView
InBlock.gif
InBlock.gif        ' 
try to retrieve item from cache
InBlock.gif        ' 
if it's not there, add it
InBlock.gif        Source 
= Cache("MyDataSet")
InBlock.gif
InBlock.gif        If Source Is Nothing Then
InBlock.gif            Dim MyConnection As SqlConnection
InBlock.gif            Dim MyCommand As SqlDataAdapter
InBlock.gif
InBlock.gif            MyConnection 
= New SqlConnection(ConfigurationManager.ConnectionStrings("pubsConnectionString").ConnectionString)
InBlock.gif            MyCommand 
= New SqlDataAdapter("select * from Authors", MyConnection)
InBlock.gif
InBlock.gif            Dim ds As New DataSet
InBlock.gif            MyCommand.Fill(ds, 
"Authors")
InBlock.gif
InBlock.gif            Source 
= New DataView(ds.Tables("Authors"))
InBlock.gif            Cache(
"MyDataSet"= Source
InBlock.gif
InBlock.gif            CacheMsg.Text 
= "Dataset created explicitly"
InBlock.gif        Else
InBlock.gif            CacheMsg.Text 
= "Dataset retrieved from cache"
InBlock.gif        End If
InBlock.gif
InBlock.gif        MyGrid.DataSource 
= Source
InBlock.gif        MyGrid.DataBind()
InBlock.gif    End Sub
ExpandedBlockEnd.gif  
</script>
None.gif  这种数据缓存的效率比较高,可以缓存很大的数据量,可以同时缓存到内存和硬盘
五、Web.Config   配置
None.gif<caching>
None.gif   
<outputCache>
None.gif    
<diskCache enabled="true" maxSizePerApp="2" />  设置在硬盘中缓存 单位是兆
None.gif   
</outputCache>
None.gif   
<outputCacheSettings>
None.gif    
<outputCacheProfiles>
None.gif     
<add name="CacheFor60Seconds" duration="60" />
None.gif    
</outputCacheProfiles>
None.gif   
</outputCacheSettings>
None.gif   
<!--
None.gif   <sqlCacheDependency enabled="true" pollTime="1000" >
None.gif    <databases>
None.gif     <add name="PubsDB" connectionStringName="pubsConnectionString" />
None.gif    </databases>
None.gif   </sqlCacheDependency>
None.gif   
-->
None.gif  
</caching>
None.gif



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/10/05/248896.html如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章