你可以验证一下你就会发现服务器上的请求数量会降低不少的。这种情况尤其适合与那些更新不是很频繁的网站内容,例如你一天(或则很长时间)只更新一次。 下面再讨论一种客户端的缓存技术这种技术也叫断开连接的ADO连接技术(翻译水平太次,听上去怎么这么别扭)。这种技术主要使用在用来保存用户个人信息,例如用户的密码,代号等等上面。它主要使用了ADO的一些属性。同时也回答了一些网友曾经提到过的能否在Application中使用ADO对象的问题。解释不清楚,下面让代码来发言: 文件GLOBAL.ASA: 复制代码 代码如下: <!--METADATA TYPE="TypeLib" FILE="C:Program FilesCommon Filessystemadomsado15.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 % >
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