动态网 > 好文章 > 正文

ASP中Cache技术的应用

时间:2017-02-18 18:17:08

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"
%>

本文地址: /article-3131337-1.shtml

上一篇:通过数组给您的文件排序

下一篇:&lt;b&gt;浅谈 ASP 模板技术之参数传递&lt;/b&gt;

相关热门
  • 婴儿重症肺炎的治疗方法

    婴儿重症肺炎的治疗方法

    婴儿重症肺炎是发病率极高的一种疾病之一,我们作为家长,当我们的孩子出现肺炎的情况,无不牵动着我们广大父母的心,为此经常半夜三更带着孩子四处求医问诊,折磨了孩子,也折磨了很多家长,那么有什么好的方法来治疗婴儿重症肺炎的情况呢?既可以解决婴儿反复发烧的问题也可以给我们的父母少些困扰,下面我们就来介绍一下

  • 婴儿肝炎综合征的治疗方法

    婴儿肝炎综合征的治疗方法

    婴儿肝炎综合征无疑是现在人们讨论的一大焦点,现如今,婴儿都会得各种各样的疾病,肝炎给我们的生活带来了巨大的苦痛和折磨,让很多的人饱受着苦难,为此很多人也四处求医问诊,但是都没有得到很好的治疗效果,那么这种疾病就没有办法治了吗?答案显然不是的,那么有什么好的方法来治疗婴儿肝炎综合征呢?下面就让我们一起

  • 宝宝神经系统发育的特点

    宝宝神经系统发育的特点

    宝宝神经系统发育对于宝宝的不同年龄应该有不同发育程度,掌握好最有效的睡眠时间不仅可以提高我们宝宝的睡眠质量,而且会促进宝宝们正常健康茁壮成长,所以掌握宝宝睡眠时间就显得非常重要,同样这也有利于我们宝宝神经系统发育,宝宝神经系统发育涉及到了很多方面的问题,例如,怎样才能促进宝宝神经系统发育正常发育呢?

  • 左侧侧脑室后角宽是什么

    左侧侧脑室后角宽是什么

    每个宝宝都是上天赋予我们的天使,也是每个家庭的希望,但是并不是每个家庭都这么幸运,孕妈妈在宝宝还没出生的时候就检查出来胎儿左侧侧脑室后角宽,这对于每个家庭来说无疑是一个噩耗,但是也并不是胎儿左侧侧脑室后角宽就等于是没有了希望,还要看在宝宝成长过程中会不会被吸收掉。那么到底左侧侧脑室后角宽是什么呢?一

  • 婴儿锁骨骨折怎么办

    婴儿锁骨骨折怎么办

    对于新生婴儿来说他们的身体是非常刺弱的,如果是稍微照顾不好就会出现各种各样的问题,而在婴儿出生的时候如果是医生没有做好护理措施的话很容易就会导致婴儿锁骨骨折的情况,不过好在婴儿锁骨骨折对于婴儿本身并不会有什么大的伤害,所以知道婴儿锁骨骨折怎么办,及时的为孩子进行治疗才是家长朋友应该关心的事情。对新生

  • 满月宝宝黄疸正常值是多少

    满月宝宝黄疸正常值是多少

    满月宝宝黄疸正常值是多少?新生儿的黄疸症状是非常常见的,那么满月宝宝黄疸正常值是多少才是正常的呢?超出多少又是不正常的呢?家长对这种指标应该是非常了解的才对。满月宝宝黄疸正常值影响到了宝宝黄疸的治疗。黄疸一般分为生理性黄疸与病理性黄疸,只要超出生理性黄疸的范围就称为病理性黄疸。满月宝宝黄疸正常值分析

  • 宝宝大便果冻样粘液是为什么

    宝宝大便果冻样粘液是为什么

    很多的宝宝的大便出现了问题,那么很容易就会是宝宝患上了某些疾病导致的,因此出现了这个问题的宝宝就需要及时的进行治疗来保证健康,那么宝宝大便果冻样粘液是为什么呢?那么下面我就为大家来介绍一下宝宝大便果冻样粘液的问题吧。有时候人的肠道需要自我清理,也会出现这种现象。建议观察一两天,如果不再出现这种情况,

  • 宝宝大便糊状是为什么呢

    宝宝大便糊状是为什么呢

    很多的时候宝宝的大便出现了问题很有可能是消化系统导致的,还有可能就是宝宝患上了某些疾病,因此宝宝大便出现了问题就需要及时的进行治疗,那么宝宝大便糊状是为什么呢?那么下面我就为大家来介绍一下这个问题吧。小儿由于年龄、饮食、排便习惯等的不同,每天排便次数可以不尽相同。婴幼儿粪便的次数和性质常反映着小儿胃

  • 宝宝黄疸反复的原因有哪些呢

    宝宝黄疸反复的原因有哪些呢

    宝宝黄疸反复的原因有哪些呢?宝宝黄疸反复是困扰很多宝妈的问题之一,宝宝出现黄疸症状的话,家长都会十分担心的,特别是宝宝黄疸反复出现,面对宝宝黄疸反复的症状,家长要知道为什么会出现反复发作,找到原因后,才能够更加彻底的进行治疗。宝宝黄疸反复是因为新生儿溶血造成的,常见于母亲为O型血,宝宝为其他血型而造

  • 关于宝宝黄疸照蓝光一些知识介绍

    关于宝宝黄疸照蓝光一些知识介绍

    由于会出现很多不同的情况,宝宝在出生后很容易出现黄疸的现象,那么此时医生就会采取照蓝光的治疗。当妈妈看到孩子要照蓝光不免心中都会非常的痛苦。那么你们对孩子照蓝光你们又了解多少呢?下面小编就关于宝宝黄疸照蓝光一些知识来给各位来个介绍。因为种种原因,宝宝在妈妈肚子里出来时,黄疸值都会不正常,通过蓝光治疗

  • 宝宝一个月了还有黄疸怎么回事

    宝宝一个月了还有黄疸怎么回事

    现在很多新生儿多出现了黄疸的症状,出现黄疸的症状代表着宝宝新陈代谢不是很稳定。家长也很是担心,不知道该怎么处理这种病。那么今天就来为大家介绍一下两个月宝宝黄疸不退应该怎么进行救治。那么到底是什么原因引起的黄疸呢?般情况下没事的,黄疸分为生理性黄疸和病理性黄疸。新生儿黄疸一般分为生理性黄疸和病理性黄疸

  • 宝宝拉果冻状大便是怎么回事呢

    宝宝拉果冻状大便是怎么回事呢

    很多的宝宝大便出现了问题,那么很容易就是宝宝患上了某些疾病或者是其他的原因导致的,因此有很多的宝宝大便出现了果冻形状的,让很多的父母担心,那么宝宝拉果冻状大便是怎么回事呢?那么下面我就为大家来介绍一下这个问题吧。一开始拉的也是有点像鼻涕一样有透明状的东西,慢慢的就拉水和泡沫了,而且是绿色的。去十七冶

  • 满月婴儿黄疸该如何进行治疗呢

    满月婴儿黄疸该如何进行治疗呢

    很多的宝宝出现了黄疸不正常的现象,严重的影响到了宝宝的健康,因此很多的家长感到担心,不知道该如何帮助宝宝进行治疗才能够保证宝宝的身体的健康,那么满月婴儿黄疸该如何进行治疗呢?那么下面我就为大家来介绍一下这个问题吧。新生儿黄疸症大部分新生儿在出生后的一周内可能出现皮肤黄染,这是由于体内胆红素沉积在皮肤

  • 三个月宝宝干呕该怎么办呢

    三个月宝宝干呕该怎么办呢

    很多的宝宝出现了干呕的现象发生,严重的影响到了宝宝的身体的健康的问题,因此很多的父母对宝宝出现了这个问题感到担心,是否会影响到宝宝的健康,那么三个月宝宝干呕该怎么办呢?那么下面我就为大家来介绍一下这个问题吧。幼儿出现干呕有的是由于食道下端括约肌的功能缺陷,引起胃液或者胆汁还流食道一起的临床征候群,部

  • 宝宝拉果冻样大便是为什么呢

    宝宝拉果冻样大便是为什么呢

    很多的时候宝宝的大便出现了问题,那么很有可能是宝宝患上了某些疾病导致的,因此宝宝大便出现了问题就需要及时的进行检查和治疗,那么宝宝拉果冻样大便是为什么呢?那么下面我就为大家来介绍一下宝宝大便出现问题的解决的方法吧。果冻状大便以及呈鼻涕果冻状考虑肠炎或者细菌性痢疾。、建议进一步化验大便常规确诊看看,需