方式, 現在來看看 ASP 中的 cache 方式.
由於 ASP 中沒有內建的 cache 物件, 所以沒辦法利用 ASP 中的內建的方式來進行 cache, 如前篇所言, cache 類似全域物件的 Application , 所以實作 ASP 的 cache 方法, 就是利用 Application 來實作囉.
這裡利用了兩個變數, exp_"cacheToken" 及 data_"cacheToken" 兩個 Application 的變數來進行操作, 程式碼如下:
Function getCacheValue(cacheToken)
If CDate(Application(
"exp_" & cacheToken)) >=
Now Then getCacheValue = Application(
"data_" & cacheToken)
Else getCacheValue =
"" End IfEnd FunctionFunction setCacheValue(cacheToken, cacheValue, cacheSecond)
Application.Lock
Application(
"data_" & cacheToken) = cacheValue
Application(
"exp_" & cacheToken) = DateAdd(
"s", cacheSecond, Now)
Application.Unlock
End Function基本上, 使用 Application 的時候, 要注意寫入鎖定的問題, 讀取時沒有這個問題, 所以這是比較要注意的地方, 接下來簡單說明一下使用方式:
getCacheValue 為取出 cache 的資料, 利用 token 做為索引, 而資料原則上可以放置 variant 的型態, 但建議放比較單純的資料, 例如字串, 以增進效能, 若是該資料已過期或不存在時, 則回傳空字串.
setCacheValue 為設定 cache 資料, 傳入 token, value 及 TTL (以秒為單位), 如此一來便能有效地管理這些 cache 的資料, 當然隨時想更新, 可以直接利用 setCacheValue 設定即可, 注意 Application 寫入時, 要先取得鎖定權, 如此方能避免資料競爭問題(race condition).
至於如何應用的 pattern 如下:
sData = getCacheValue(
"myToken")
If sData =
"" Then
sData = ComputeSomethingFunc(
"xxx")
setCacheValue
"myToken", sData, 180
End If
Response.Write sData
如此一來 sData 可以利用 Application 中的 data_myToken 資料來做為快取資料, 其中有 180 秒的存活期, 若在存活期內, 就直接取用, 若過期時, 才調用負載較大的 ComputeSomethingFunc 來進行運算, 這類應用通常用於資料庫展示產品資料時使用, 可以大幅降低查詢的頻率, 以提升效能.
延伸閱讀:
http://www.eeffee.com/index.php/action_viewnews_itemid_25339.html