网络编程
位置:首页>> 网络编程>> Asp编程>> ASP使用缓存方法及缓存类详解(3)

ASP使用缓存方法及缓存类详解(3)

  发布时间:2008-02-15 08:36:00 

标签:缓存,asp,类

在介绍这些技术之前先说明一下到底什么是ASP的缓存技术?

所谓缓存其实就是在内存中开辟一个用来保存数据的空间,使用缓存你就不用频繁的访问你保存在硬盘上的数据了,灵活的使用缓存你就免去了心疼的看着可怜的硬盘饱受读数据时的折磨了。当你一旦执行了一个查询动作,并且将查询结果放入缓存中后,你就可以很迅速的重复访问这些数据了。而如果你不把数据放入缓存的话,当你再次执行这个查询时,服务器会将进程耗费在从数据库中获取并排序上了。

当数据保存在缓存中时,再次查询时耗费的时间主要是在显示数据的时间上了。

也就是说,我们不应该把经常需要改变的数据放到服务端的缓存中,我们应该把改变少,但是又需要经常访问的数据放到缓存中。

现在我们先讨论ASP在服务端使用缓存的技术,过会再讨论ASP如何在客户端使用缓存的技术。

当你有大量的数据(静态的,就是说变动比较少的)需要显示给客户端时,你就可以考虑使用服务端的缓存技术了。这种技术尤其适用于那些显示风格一致性比较强的网站(呵呵,对于非主流的网站可不好用的说。)

其实实现方法特别的简单,大家只要看看下面这个简单的例子就明白了。

这是一个用来显示书籍分类的例子程序

DisplayBooks.ASP文件:

< %@ LANGUAGE=JavaScript % > 
< html > 
< body > 
< form method=post > 
书籍分类; < %= getBooksListBox() % > 
< p> 
< input type=submit > 

< % 
function getBooksListBox() 

BooksListBox = Application("BooksListBox") 
if (BooksListBox != null) return BooksListBox; 
crlf = String.fromCharCode(13, 10) 
BooksListBox = "< select name=Books>" + crlf; 
SQL = "Select * FROM Books orDER BY Name"; 
cnnBooks = Server.CreateObject("ADODB.Connection"); 
cnnBooks.Open("Books", "Admin",""); 
rstBooks = cnnBooks.Execute(SQL); 
fldBookName = rstBooks("BookName"); 
while (!rstBooks.EOF){ 
BooksListBox = BooksListBox + " < option>" + 
fldBookName + "" + crlf; 
rstBooks.MoveNext(); 

BooksListBox = BooksListBox + "" 
Application("BooksListBox") = BooksListBox 
return BooksListBox; 

% >

很简单把,其实就是用了很简单的Application技术,而且就一句话的不同:
  

Application("BooksListBox") = BooksListBox 


  你可以验证一下你就会发现服务器上的请求数量会降低不少的。这种情况尤其适合与那些更新不是很频繁的网站内容,例如你一天(或则很长时间)只更新一次。

  下面再讨论一种客户端的缓存技术这种技术也叫断开连接的ADO连接技术(翻译水平太次,听上去怎么这么别扭)。这种技术主要使用在用来保存用户个人信息,例如用户的密码,代号等等上面。它主要使用了ADO的一些属性。同时也回答了一些网友曾经提到过的能否在Applocation中使用ADO对象的问题。解释不清楚,下面让代码来发言:

文件GLOBAL.ASA:

< !--METADATA TYPE="TypeLib" FILE="C:\Program Files\Common 
Files\system\ado\msado15.dll"-- > 
< SCRIPT LANGUAGE=VBScript RUNAT="Server" > 
Sub Application_OnStart 
SQL = "Select UserName, Password FROM UserInfo" 
cnnUsers = "DSN=User" 
Set rsUsers = Server.CreateObject("ADODB.Recordset") 
'注意下面这两句话,就是用来实现那个叫可用的断开连接的ADO技术 
rsCustomers.CursorLocation = adUseClient 
rsCustomers.Open SQL, cnnAdvWorks, adOpenStatic, AdLockReadOnly 
' 断开RecordSet的和数据库的连接 
rsCustomers.ActiveConnection = Nothing 
Set Application("rsCustomers") = rsCustomers 
End Sub 
文件Users.ASP 
< % 
'Clone方法使得每个用户拥有自己的一个RecordSet集合 
Set yourUsers = Application("rsUsers").Clone 
Set UserName = yourUsers("UserName") 
Set Password = yourUsers("Password") 
Do Until yourUsers.EOF 
% > 
用户姓名:< %= UserName % > 用户密码:< %= Password % > 
< % 
yourUsers.MoveNext 
Loop 
% >  

至于缓存的作用,我想我也不用再多说了,它的作用已经很明显,特别是对于信息量非常大或是全数据库页面的网站,他能很好地利用主机的内存资源,加速ASP的执行效率,减轻服务器的负担,而动网在这一方面做得是最突出的,像他现在的dvbbs7.1.0版,更是在缓存的利用上更上一层楼,前后台大多的操作都和缓存有关,而现在动网里用的也就是迷城浪子的缓存类:

<%
Class Cls_Cache 
'==================使用说明==================== 
'本类模块是动网先锋原创,作者:迷城浪子。如采用本类模块,请不要去掉这个说明。这段注释不会影响执行的速度。 
'作用:缓存和缓存管理类 
'公有变量:Reloadtime 过期时间(单位为分钟)缺省值为14400 
'MaxCount 缓存对象的最大值,超过则自动删除使用次数少的对象。缺省值为300 
'CacheName 缓存组的总名称,缺省值为"Dvbbs",如果一个站点中有超过一个缓存组,则需要外部改变这个值。 
'属性:Name 定义缓存对象名称,只写属性。 
'属性:value 读取和写入缓存数据。 
'函数:ObjIsEmpty()判断当前缓存是否过期。 
'方法:DelCahe(MyCaheName)手工删除一个缓存对象,参数是缓存对象的名称。 
'======================== 
Public Reloadtime,MaxCount,CacheName 
Private LocalCacheName,CacheData,DelCount 

Private Sub Class_Initialize() 
Reloadtime=14400 '过期时间(单位为分钟)
CacheName="Dvbbs" '缓存组的总名称
End Sub 

Private Sub SetCache(SetName,NewValue) 
Application.Lock 
Application(SetName) = NewValue 
Application.unLock 
End Sub 

Public Property Let Name(ByVal vNewValue) '缓存对象名称
LocalCacheName=LCase(vNewValue) 
End Property 

Public Property Let Value(ByVal vNewValue) '读取和写入缓存数据
If LocalCacheName<>"" Then 
CacheData=Application(CacheName&"_"&LocalCacheName) 
If IsArray(CacheData) Then 
CacheData(0)=vNewValue 
CacheData(1)=Now() 
Else 
ReDim CacheData(2) 
CacheData(0)=vNewValue 
CacheData(1)=Now() 
End If 
SetCache CacheName&"_"&LocalCacheName,CacheData 
Else 
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName." 
End If 
End Property 

Public Property Get Value() 
If LocalCacheName<>"" Then 
CacheData=Application(CacheName&"_"&LocalCacheName) 
If IsArray(CacheData) Then 
Value=CacheData(0) 
Else 
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " The CacheData Is Empty." 
End If 
Else 
Err.Raise vbObjectError + 1, "DvbbsCacheServer", " please change the CacheName." 
End If 
End Property 

Public Function ObjIsEmpty() '判断当前缓存是否过期
ObjIsEmpty=True 
CacheData=Application(CacheName&"_"&LocalCacheName) 
If Not IsArray(CacheData) Then Exit Function 
If Not IsDate(CacheData(1)) Then Exit Function 
If DateDiff("s",CDate(CacheData(1)),Now()) < 60*Reloadtime Then ObjIsEmpty=False 
End Function 

Private Sub makeEmpty(SetName) '释放内存
Application.Lock 
Application(SetName) = Empty 
Application.unLock 
End Sub 

Public Sub DelCahe(MyCaheName) '删除缓存
makeEmpty(CacheName&"_"&MyCaheName) 
End Sub 
End Class 

'Set WydCache=New Cls_Cache 
'WydCache.Reloadtime=0.5 '定义过期时间 (以分钟为单会) 
'WydCache.CacheName="pages" '定义缓存名 
'IF WydCache.ObjIsEmpty() Then ''判断是否可用(包括过期,与是否为空值) 
'Response.write WydCache.Value 
'Else 
'.................. 
'BoardJumpList=xxx 
'WydCache.Value=BoardJumpList '写入内容 
'Response.write BoardJumpList 
'End if&

0
投稿

猜你喜欢

  • sql server 全文检索有两种搜索方式,一种是contains,另一种是freetext。前者是包含,类似于 like '%关
  • 注:IE8以前的版本均不支持该特性为了向文档中插入生成内容,可以使用:before与:after伪元素。如,我想在所有链接的后面加上&quo
  • asp之家注:本文介绍了使用asp来获取access数据库中的一条随机记录的方法,简单实用,相信对初学者有所帮助,根据这个方法其实我们可以实
  • 关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况:p4: 2.4内存: 1 Gos: windows 2003数据库:SQ
  • 好不容易有些空余时间,便拿来写自己的CSS选择器引擎了,这个CSS选择器引擎的目标只有三个:速度要快代码要精简要支持CSS3的选择器。希望通
  • 进行访问MySQL数据库的方法有很多种,下面将向大家介绍一些很简单实用的用的方法和示例与大家一起分享。方法一:使用MYSQL推出的MySQL
  • 这一段要毕业,得折磨自己两个月....这段时间还是会摆弄了javascript的.大致在下面两个方面: 1.javascript的
  • 当我们使用访问一个没有声明的变量时,JS会报错;而当我们给一个没有声明的变量赋值时,JS不会报错误,相反它会认为我们是要隐式申明一个全局变量
  • 用IIS调试ASP程序时,有的页面可以显示出错行及出错原因,虽然原因不是很具体但足以引导调试程序,但有些时候就直接出现:HTTP 500 -
  • 在ASP的实际操作中,总会发生这样的情况,如在银行,从我的帐户往费文华的帐户划款,我的帐户显示已经划出,但因银行的系统出现故障,导致费文华帐
  •   怎么增大MySQL数据库连接数,MYSQL数据库安装完成后,默认连接数是100,流量稍微大一点的论坛或网站这个连接数是不够哟用
  • 今天的问题是请问以下 alert 弹出值分别是什么?var f = function f2()&nb
  • 之前在豆瓣上听到有友邻在抱怨卓越的配送速度慢得跟蜗牛一样,超过配送时间期限几天还没送到,当时不太相信,因为此前在卓越网上购买的物品基本上是在
  • JS获取网页中HTML元素的几种方法分析:getElementById getElementsByName getElementsByTag
  • 以下的文章主要是对MySQL limit查询优化的具体内容的介绍,我们大家都知道MySQL数据库的优化是相当重要的。其他最为常用也是最为需要
  • 语言是信息传播的主要障碍。多语言网站,顾名思义就是能够以多种语言(而不是单种语言)为用户提供信息服务,让使用不同语言的用户都能够从同个网站获
  • 这是一家游戏公司,他面试通过后 擅长的机试却没答出来,不过还是被录用了。这道题内容大概这样有条蛇它长度不固定,蛇头朝北顺时针盘旋着,请打印出
  • 有时一些网页对源码进行了加密,我们很难找到类似像“onselectstart="return false"”这样的代码,
  • 假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做pc;用来保存配件供货信息的表叫做parts。在pc
  • 这样做的好处是:利用表格来装载数据,不言而喻是最好的,你可以很灵活的为每个单元格定义样式。下面是具体的做法首先在photoshop设计一个效
手机版 网络编程 asp之家 www.aspxhome.com