熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

簡單介紹ASP中Cache技術的應用

2013-11-13 09:41:17  來源: .NET編程 

  ASP從發布至今已經年了使用ASP技術已經相當成熟自從微軟推出了ASPNET之後就逐漸停止了對ASP版本的更新但是由於有很多人仍然習慣使用ASP來開發網站所以再次我將以一個簡單的例子來說明在ASP中如何使用Cache
  
  簡單的說使用Cache基本原理是把經常需要且獲得代價昂貴的數據在內存中持續保存一定時間以供這些數據可以被直接地全局地訪問例如有一些數據需要從數據庫多個表中查詢獲得且幾乎每個頁面都要調用這些數據
  
  這種情況下的最佳實現就是將這部分數據Cache起來在ASP中的簡單實現就是將這些數據的最終表達形式(例如HTML流)封裝在string中然後存入ASP內置對象Application中(本文主要討論的是動態Cache簡單的ASP 應用就省略)這樣做的好處是在整個網站中可以全局調用這段HTML而且Application是存在內存中所以不用再去查詢數據庫從而加快了響應時間並節省了服務器負荷當然這是以消耗內存為代價的是一個典型的以空間換時間的實例
  
  使用這種方法雖然有很多好處但是再遇到頻繁變化的數據源(數據庫)的時候這種方法就可能不再適用因為ASP Application對象有一個缺點就是不能自動隨數據源的變化而變化或者控制刷新間隔所以就需要開發人員編程來實現動態Cache當然在程序設計的時候可以在所有進行改變數據源(數據庫)操作時就更新一次Appliction從而使數據源(數據庫)始終保持一致這樣做在編程上要考慮的問題會比較多容易遺漏細節所以除了特定情況我不推薦使用這種方法
  
  我認為在ASP中最好的辦法是用編程實現定時刷新Cache也就是說給Application中儲存的設一個過期時間當然在ASP中Application對象沒有這樣一個ExpireTime屬性這需要用程序實現
  
  Code
  ASPdefaultasp
  
  <%@Language=VBScript%>
  <%Option Explicit%>
  <%ResponseBuffer=True%>
  <!#include file = connasp>
  <!#include file = GetCacheasp>
  <HTML>
  <HEAD>
  <TITLE>ASP Cache演示</TITLE>
  <META HTTPEQUIV=ContentType CONTENT=text/html; charset=gb>
  </HEAD>
  <BODY>
  <h>每隔秒刷新Cache</h>
  <%
  responseFlush
  GetHTMLStream
  responseWrite
  HTMLStream
  %>
  </body>
  </html>
  
  ASPgetcacheasp
  
  <%
  Const CACHE_DEFAULT_INTERVAL = 每隔秒刷新一次cache
  Dim HTMLStream
  Dim IsExpires
  IsExpires = CacheExpires
  Function CacheExpires
  Dim strLastUpdate
  Dim result strLastUpdate = Application(LastUpdate)
  If (strLastUpdate = ) Or (CACHE_DEFAULT_INTERVAL < DateDiff(s strLastUpdate Now)) Then
  result = true
  SetLastUpdateTime
  Else
  result = false
  End If
  CacheExpires = result
  End Function
  
  Sub SetLastUpdateTime
  ApplicationLock
  Application(LastUpdate) = CStr(now())
  ApplicationUnLock
  End Sub
  Sub GetHTMLStream
  If IsExpires Then
  UpdateHTMLStream
  End If
  HTMLStream=Application(CACHE_HTMLStream)
  End Sub
  
  Sub UpdateHTMLStream
  dim d
  d = FetchHTMLStream
  ApplicationLock
  Application(CACHE_HTMLStream) = d
  ApplicationUnLock
  End Sub
  
  Function FetchHTMLStream
  Dim rs strSQL strHTML
  Set rs = CreateObject(ADODBRecordset)
  strSQL = select categoryID categoryname from categories
  rsOpen strSQL strConnadOpenForwardOnlyadLockReadOnly
  strHTML = strHTML & <select name=slt_search>
  while (not rsEOF)
  strHTML = strHTML & <option>
  strHTML = strHTML & rsFields(categoryname)
  strHTML = strHTML & </option> rsMoveNext
  wend
  strHTML = strHTML & </select>
  rsClose
  Set rs = Nothing
  FetchHTMLStream = strHTML
  End Function
  %>
  
  ASPconnasp
  
  <!METADATA NAME=Microsoft ActiveX Data Objects Library TYPE=TypeLib UUID={AADEA}>
  <%
  dim strConn
  strConn = Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind
  %>
From:http://tw.wingwit.com/Article/program/net/201311/11337.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.