加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

asp从缓存读数据案例

发布时间:2023-08-29 15:02:32 所属栏目:Asp教程 来源:
导读:从文件读数据,要比直接从数据库快,测试读出6000条新闻,读数据库用了23579毫秒,读文件只用了123毫秒,下例为使用文件缓存的代码

使用方法,在需要使用文件缓存的页面加入下列代码,

<!--#include file=
从文件读数据,要比直接从数据库快,测试读出6000条新闻,读数据库用了23579毫秒,读文件只用了123毫秒,下例为使用文件缓存的代码  
 
使用方法,在需要使用文件缓存的页面加入下列代码,
 
<!--#include file="FileCatch.asp" -->
 
<%
 
Set MyCatch=new CatchFile
 
MyCatch.Overdue=10     ’修改过期时间设置为10分钟
 
if MyCatch.CatchNow(Rev) then
 
        response.write MyCatch.CatchData
 
        response.end
 
end if
 
set MyCatch=nothing
 
%>
 
FileCatch.asp
 
复制内容到剪贴板代码:
 
<%
 
’ 本文件用于签入原始文件,实现对页面的文件Catch
 
’ 1、如果文件请求为POST方式,则取消此功能
 
’ 2、文件的请求不能包含系统的识别关键字
 
Class CatchFile
 
        Public Overdue,Mark,CFolder,CFile ’定义系统参数
 
        Private ScriptName,ScriptPath,ServerHost ’定义服务器/页面参数变量
 
        Public CatchData        ’输出的数据
 
        Private Sub Class_Initialize        ’初始化函数
 
                ’获得服务器及脚本数据
 
                ScriptName=Request.Servervariables("Script_Name") ’识别出当前脚本的虚拟地址
 
                ScriptPath=GetScriptPath(false)        ’识别出脚本的完整GET地址
 
                ServerHost=Request.Servervariables("Server_Name") ’识别出当前服务器的地址
 
                ’初始化系统参数
 
                Overdue=30        ’默认30分钟过期
 
                Mark="NoCatch"        ’无Catch请求参数为 NoCatch
 
                CFolder=GetCFolder        ’定义默认的Catch文件保存目录
 
                CFile=Server.URLEncode(ScriptPath)&".txt"        ’将脚本路径转化为文件路径
 
                CatchData=""
 
        end Sub
 
        Private Function GetCFolder
 
                dim FSO,CFolder
 
                Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象
 
                CFolder=Server.MapPath("/")&"/FileCatch/"
 
                if not FSO.FolderExists(CFolder) then
 
                        fso.CreateFolder(CFolder)
 
                end if
 
                if Month(Now())<10 then
 
                        CFolder=CFolder&"/0"&Month(Now())
 
                else
 
                        CFolder=CFolder&Month(Now())
 
                end if
 
                if Day(Now())<10 then
 
                        CFolder=CFolder&"0"&Day(Now())
 
 else
 
                        CFolder=CFolder&Day(Now())
 
                end if
 
                CFolder=CFolder&"/"
 
                if not FSO.FolderExists(CFolder) then
 
                        fso.CreateFolder(CFolder)
 
                end if
 
                GetCFolder=CFolder
 
                set fso=nothing
 
        End Function
 
        Private Function bytes2BSTR(vIn)        ’转换编码的函数
 
                dim StrReturn,ThisCharCode,i,NextCharCode
 
                strReturn = ""
 
                For i = 1 To LenB(vIn)
 
                        ThisCharCode = AscB(MidB(vIn,i,1))
 
                        If ThisCharCode < &H80 Then
 
                                strReturn = strReturn & Chr(ThisCharCode)
 
                        Else
 
                                NextCharCode = AscB(MidB(vIn,i+1,1))
 
                                strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
 
                                i = i + 1
 
                        End If
 
                Next
 
                bytes2BSTR = strReturn
 
        End Function
 
        Public Function CatchNow(Rev)        ’用户指定开始处理Catch操作
 
                if UCase(request.Servervariables("Request_Method"))="POST" then
 
                ’当是POST方法,不可使用文件Catch
 
                        Rev="使用POST方法请求页面,不可以使用文件Catch功能"
 
                        CatchNow=false
 
                else
 
                        if request.Querystring(Mark)<>"" then
 
                        ’如果指定参数不为空,表示请求不可以使用Catch
 
 Rev="请求拒绝使用Catch功能"
 
                                CatchNow=false
 
                        else
 
                                CatchNow=GetCatchData(Rev)
 
                        end if
 
                end if
 
        End Function
 
        Private Function GetCatchData(Rev)        ’读取Catch数据
 
                Dim FSO,IsBuildCatch
 
                Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象,访问CatchFile
 
                If FSO.FileExists(CFolder&CFile) Then
 
                        Dim File,LastCatch
 
                        Set File=FSO.GetFile(CFolder&CFile)        ’定义CatchFile文件对象
 
                        LastCatch=CDate(File.DateLastModified)
 
                        if DateDiff("n",LastCatch,Now())>Overdue then
 
                        ’如果超过了Catch时间
 
                                IsBuildCatch=true
 
                        else
 
                                IsBuildCatch=false
 
                        end if
 
                        Set File=Nothing
 
                else
 
                        IsBuildCatch=true
 
                End if
 
                If IsBuildCatch then
 
                        GetCatchData=http://www.code-123.com/html/BuildCatch(Rev)        ’如果需要创建Catch,则创建Catch文件,同时设置Catch的数据
 
                else
 
                        GetCatchData=http://www.code-123.com/html/ReadCatch(Rev)        ’如果不需要创建Catch,则直接读取Catch数据
 
                End if
 
                Set FSO=nothing
 
 End Function
 
        Private Function GetScriptPath(IsGet)        ’创建一个包含所有请求数据的地址
 
                dim Key,Fir
 
                GetScriptPath=ScriptName
 
                Fir=true
 
                for Each key in Request.QueryString
 
                        If Fir then
 
                                GetScriptPath=GetScriptPath&"?"
 
                                Fir=false
 
                        else
 
                                GetScriptPath=GetScriptPath&"&"
 
                        end if
 
                        GetScriptPath=GetScriptPath&Server.URLEncode(Key)&"="&Server.URLEncode(Request.QueryString(Key))
 
                Next
 
                if IsGet then
 
                        If Fir then
 
                                GetScriptPath=GetScriptPath&"?"
 
                                Fir=false
 
                        else
 
                                GetScriptPath=GetScriptPath&"&"
 
                        end if
 
                        GetScriptPath=GetScriptPath&Server.URLEncode(Mark)&"=yes"
 
                end if
 
        End Function
 
        ’创建Catch文件
 
        Private Function BuildCatch(Rev)
 
                Dim HTTP,Url,OutCome
 
                Set HTTP=CreateObject("Microsoft.XMLHTTP")
 
’                On Error Resume Next
 
’                response.write ServerHost&GetScriptPath(true)
 
                HTTP.Open "get","http://"&ServerHost&GetScriptPath(true),False
 
                HTTP.Send
 
                if Err.number=0 then
 
                        CatchData=http://www.code-123.com/html/bytes2BSTR(HTTP.responseBody)
 
    BuildCatch=True
 
                else
 
                        Rev="创建发生错误:"&Err.Description
 
                        BuildCatch=False
 
                        Err.clear
 
                end if
 
                Call WriteCatch
 
                set HTTP=nothing
 
        End Function
 
        Private Function ReadCatch(Rev)
 
                ReadCatch=IReadCatch(CFolder&CFile,CatchData,Rev)
 
        End Function
 
        Private Sub WriteCatch
 
                Dim FSO,TSO
 
                Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象,访问CatchFile
 
                set TSO=FSO.CreateTextFile(CFolder&CFile,true)
 
                TSO.Write(CatchData)
 
                Set TSO=Nothing
 
                Set FSO=Nothing
 
        End Sub
 
End Class
 
Function IReadCatch(File,Data,Rev)
 
        Dim FSO,TSO
 
        Set FSO=CreateObject("Scripting.FileSystemObject")        ’设置FSO对象,访问CatchFile
 
’        on error resume next
 
        set TSO=FSO.OpenTextFile(File,1,false)
 
        Data=http://www.code-123.com/html/TSO.ReadAll
 
        if Err.number<>0 then
 
                Rev="读取发生错误:"&Err.Description
 
                ReadCatch=False
 
                Err.clear
 
        else
 
                IReadCatch=True
 
        end if
 
        Set TSO=Nothing
 
        Set FSO=Nothing
 
End Function
 
%>
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章