FLASH論壇-Flash之神魂顛倒Microsoft 應用技術區ASP / ASP.NET/ Visual Studio 討論區 → ASP中CACHE技術的應用

大安3房,僅580萬元 網路行銷秘訣大公開 中古車買賣 MSDN研討會資料下載 磷蝦油比魚油更強 Microsoft Silverlight
減肥診所 抽脂 雷射溶脂 ASP.NET快速上手 墨水匣 近視雷射手術
飛梭雷射 隆鼻 胎毛筆 清潔公司 投影機 色情
調整型內衣 徵信 隆乳 眼袋 虛擬主機 大陸新娘
NCCU集中營 保母 愛情城市 月子餐 隆鼻 創業加盟
王品台塑牛排 Flash Player 10.0.42.34 減肥

  共有5697人閱讀過本文章折疊 推文 列印

主題:ASP中CACHE技術的應用

帥哥喲,離線,有人找我嗎?
TWG
  1樓 個人化首頁 | QQ | 個人資料 | 搜尋 |


加好友 悄悄話 •神•魂•顛•倒•
等級:站長 文章:2975 經驗:29037 威望:7 精華:7 註冊:2002/4/12 15:57:00
  發表心情 發表時間:2005/1/2 23:05:00



ASP中CACHE技術的應用

ASP從發佈至今已經7年了,使用ASP技術已經相當成熟,自從微軟推出了ASP.NET之後就逐漸停止了對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
ASP:default.asp

<%@Language=VBScript%>
<%Option Explicit%>
<%Response.Buffer=True%>
<!--#include file = "conn.asp"-->
<!--#include file = "GetCache.asp"-->
<HTML>
<HEAD>
<TITLE>ASP Cache演示</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
</HEAD>
<BODY>
<h4>每隔10秒刷新Cache:</h4>
<%
response.Flush
GetHTMLStream
response.Write
HTMLStream
%>
</body>
</html>


ASP:getcache.asp

<%
Const CACHE_DEFAULT_INTERVAL = 30 '每隔30秒刷新一次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
Application.Lock
Application("LastUpdate") = CStr(now())
Application.UnLock
End Sub

Sub GetHTMLStream
If IsExpires Then
UpdateHTMLStream
End If
HTMLStream=Application("CACHE_HTMLStream")
End Sub

Sub UpdateHTMLStream
dim d
d = FetchHTMLStream
Application.Lock
Application("CACHE_HTMLStream") = d
Application.UnLock
End Sub

Function FetchHTMLStream
Dim rs ,strSQL, strHTML
Set rs = CreateObject("ADODB.Recordset")
strSQL = "select categoryID , categoryname from categories"
rs.Open strSQL, strConn,adOpenForwardOnly,adLockReadOnly
strHTML = strHTML & "<select name=""slt_search"">"
while (not rs.EOF)
strHTML = strHTML & "<option>"
strHTML = strHTML & rs.Fields("categoryname")
strHTML = strHTML & "</option>" rs.MoveNext
wend
strHTML = strHTML & "</select>"
rs.Close
Set rs = Nothing
FetchHTMLStream = strHTML
End Function
%>


ASP:conn.asp

<!--METADATA NAME="Microsoft ActiveX Data Objects 2.5 Library" TYPE="TypeLib" UUID="{00000205-0000-0010-8000-00AA006D2EA4}"-->
<%
dim strConn
strConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Northwind"
%>




網路的事情,讓網路解決

[ 逛網路就像是在探險 ]

    神 魂 顛 倒 T W G

http://bbs.flash2u.com.tw

http://tw.myblog.yahoo.com/flash2u-twg

http://flash-silverlight.blogspot.com/

http://flash2u.spaces.live.com/?_c02_owner=1
墨水匣 支持(0中立(0反對(0回到頂部
帥哥喲,離線,有人找我嗎?
loverysong
  2樓 個人化首頁 | 個人資料 | 搜尋 |


加好友 悄悄話 宋同学
等級:新手上路 文章:10 經驗:0 威望:0 精華:0 註冊:2007/3/21 11:34:00
  發表心情 發表時間:2007/3/21 13:03:00

谢谢分享!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

磷蝦油比魚油更強 支持(0中立(0反對(0回到頂部
帥哥喲,離線,有人找我嗎?
qqaaxxxx
  3樓 個人化首頁 | 個人資料 | 搜尋 |


加好友 悄悄話
等級:新手上路 文章:12 經驗:132 威望:0 精華:0 註冊:2008/1/11 0:19:59
  發表心情 發表時間:2008/1/11 1:05:58

??分享!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

隆鼻 支持(0中立(0反對(0回到頂部