ASP 는 발 표 된 지 7 년 이 지 났 고 ASP 기술 을 사용 하 는 것 이 상당히 성숙 해 졌 으 며 마이크로소프트 가 ASP.NET 을 출시 한 이후 ASP 버 전의 업 데 이 트 를 점차 중단 하고 있다.그러나 많은 사람들 이 여전히 ASP 를 사용 하여 사 이 트 를 개발 하 는 것 에 익숙 하기 때문에 다시 한 번 간단 한 예 로 ASP 에서 Cache 를 어떻게 사용 하 는 지 설명 하 겠 습 니 다.쉽게 말 하면 Cache 를 사용 하 는 기본 원 리 는 자주 필요 하고 대가 가 비 싼 데 이 터 를 메모리 에 일정 시간 지속 적 으로 저장 하여 이 데 이 터 를 직접 전역 적 으로 접근 할 수 있 도록 하 는 것 이다.예 를 들 어 일부 데 이 터 는 데이터베이스 여러 표 에서 조회 하여 얻 을 수 있 고 거의 모든 페이지 에서 이 데 이 터 를 호출 해 야 한다.
이러한 상황 에서 가장 좋 은 실현 은 바로 이 부분의 데 이 터 를 Cache 에 저장 하 는 것 이다.ASP 에서 간단 한 실현 은 바로 이러한 데이터 의 최종 표현 형식(예 를 들 어 HTML 흐름)을 string 에 밀봉 한 다음 에 ASP 내 장 된 대상 Application 에 저장 하 는 것 이다.이렇게 하 는 장점 은 전체 사이트 에서 이 HTML 을 전역 적 으로 호출 할 수 있 고 응용 프로그램 은 메모리 에 존재 하기 때문에 데이터 베 이 스 를 조회 하지 않 아 도 되 고 응답 시간 을 가속 화하 고 서버 부 하 를 절약 할 수 있다 는 것 이다.물론 이것 은 메모리 소 모 를 대가 로 하 는 전형 적 인 공간 으로 시간 을 바 꾸 는 실례 이다.
이런 방법 을 사용 하면 좋 은 점 이 많 지만 빈번하게 변화 하 는 데이터 원본(데이터베이스)을 만 났 을 때 이런 방법 은 더 이상 적용 되 지 않 을 수 있다.왜냐하면 ASP Application 대상 은 데이터 원본 의 변화 에 따라 자동 으로 변화 하지 못 하거나 새로 고침 간격 을 제어 하지 못 하 는 단점 이 있 기 때문이다.그래서 동적 Cache 를 실현 하기 위해 개발 자 프로 그래 밍 이 필요 합 니 다.물론 프로 그래 밍 을 할 때 데이터 원본(데이터베이스)을 바 꾸 는 모든 작업 을 할 때 Appliction 을 한 번 만 업데이트 할 수 있다.데이터 원본(데이터베이스)을 항상 일치 시 킵 니 다.이렇게 하면 프로 그래 밍 에 있어 서 고려 해 야 할 문제 가 비교적 많아 서 세부 사항 을 빠 뜨리 기 쉽다.그래서 특정 상황 을 제외하고는 이런 방법 을 추천 하지 않 습 니 다.
나 는 ASP 에서 가장 좋 은 방법 은 프로 그래 밍 으로 정시 에 Cache 를 갱신 하 는 것 이 라 고 생각한다.즉,응용 프로그램 에 저 장 된 기한 이 지난 시간 을 설정 하 는 것 이다.물론 ASP 에 서 는 애플 리 케 이 션 대상 에 이러한 ExpireTime 속성 이 없습니다.이것 은 프로그램 으로 실현 해 야 한다.
Code ASP:default.asp
<%@Language=VBScript%> <%Option Explicit%> <%Response.Buffer=True%>
ASP Cache 프레젠테이션</ITLE><META HTTP-QUIV="Content-Type"CONTENT="text/html;charset=gb 2312"></HEAD><BODY><h4>10 초 간격 으로 Cache:</h4><%response.Flush GetHTMLStream response.Write HTML Stream%></body></html><br> ASP:getcache.asp <br><% Const CACHE_DEFAULT_INTERVAL=30'30 초 간격 으로 cache 새로 고침 Dim HTML Stream Dim IsExpires IsExpires=CacheExpires Function CacheExpires Dim strLastUpdate Dim result strLastUpdate=Application("LastUpdate")If(strLastUpdate=")Or(CACHEDEFAULT_INTERVAL < DateDiff("s", strLastUpdate, Now)) Then result = true SetLastUpdateTime Else result = false End If CacheExpires = result End Function <br>Sub SetLastUpdateTime Application.Lock Application("LastUpdate") = CStr(now()) Application.UnLock End Sub <br> Sub GetHTMLStream If IsExpires Then UpdateHTMLStream End If HTMLStream=Application("CACHE_HTMLStream") End Sub <br> Sub UpdateHTMLStream dim d d = FetchHTMLStream Application.Lock Application("CACHE_HTMLStream") = d Application.UnLock End Sub <br> 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 %> <br> <br> ASP:conn.asp <br><!--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" %>