.NET 1.1에서 캐시는 파일 시스템, 개체 등에 기반한 캐시 종속성만 만들 수 있지만 .NET 2.0에서는 캐시가 데이터베이스의 변경 사항에 종속될 수 있도록 하는 새로운 종속성인 SqlCacheDependency를 제공합니다. 이 접근 방식은 1.1의 해결 방법과 유사해 보이지만 둘 사이에는 본질적인 차이점이 있습니다(SqlCacheDependency 개체 제공). (1.1의 해결 방법은 데이터 테이블에 대한 트리거를 생성한 다음 트리거가 트리거될 때 로컬 파일을 수정하는 것입니다. 시스템의 특정 캐시에 대한 종속성은 이 로컬 파일이므로 캐시에 캐시된 내용을 알립니다. 데이터가 변경되었습니다.)
.NET 2.0의 SqlCacheDependency는 SqlServer2000 이후 버전에서 사용할 수 있습니다. 이 문서에서는 Sql Server 2000에서 사용하는 방법을 소개합니다. Sql Server 2005는 약간 다릅니다.
먼저 .NET 2.0 프레임워크를 설치해야 합니다. 물론 Sql Server 2000을 사용할 수 있어야 합니다. .NET 2.0에서 Microsoft는 aspnet_regsql(aspnet_regiis와 동일한 디렉터리에 있음)이라는 유틸리티 도구를 제공합니다. 이는 명령줄 도구로 aspnet_regsql -?를 통해 얻을 수 있습니다. 여기서는 다음 매개변수에 관심을 둡니다. -ed는 SQL 캐시 종속성을 위해 데이터베이스를 시작합니다. -E는 인증을 위해 현재 Windows 자격 증명을 사용합니다. -d는 데이터베이스 이름이 지정되지 않은 경우 기본값인 애플리케이션 서버의 데이터베이스 이름에 사용됩니다. 데이터베이스는 "aspnetdb"로 사용됩니다. 이 기사에서는 Microsoft의 샘플 데이터베이스 게시가 사용됩니다. 그런 다음 다음 명령줄을 사용하여 캐시 종속 데이터베이스를 생성해야 합니다.
aspnet_regsql -ed -E -d pubs
(참고: 여기의 명령줄 매개 변수는 대/소문자를 구분합니다.)
이 명령을 실행한 후 pubs 데이터베이스를 열어 어떤 변경 사항이 발생했는지 확인할 수 있습니다. 먼저 AspNet_SqlCacheTablesForChangeNotification이라는 추가 테이블이 있습니다. 테이블 이름, 알림Created: 생성 시간. changeId: 변경 번호(누적 필드). 또한 데이터베이스에
AspNet_SqlCacheRegisterTableStoredProcedure,
AspNet_SqlCacheUnRegisterTableStoredProcedure,
AspNet_SqlCacheUpdateChangeIdStoredProcedure,
AspNet_SqlCacheQueryRegisteredTablesStoredProcedure,
AspNet_SqlCachePollingStoredProcedure
이러한 저장 프로시저는 말 그대로 이해하기 쉽습니다. 저장 프로시저의 세부 사항은 쿼리 분석기에서 열어서 볼 수 있습니다. 테이블의 변경 사항을 모니터링하려면 AspNet_SqlCacheRegisterTableStoredProcedure 저장 프로시저를 실행하여 모니터링해야 하는 테이블을 지정해야 합니다. 물론 유틸리티 도구 aspnet_regsql을 통해 지정할 수도 있습니다.
aspnet_regsql -et -E -d pubs -t 작성자
위 명령을 실행한 후 aspnet_regsql은 작성자를 위한 트리거를 생성합니다. 다음은 명령을 실행한 후 생성한 트리거입니다.
QUOTED_IDENTIFIER를 켜짐으로 설정
가다
ANSI_NULLS를 ON으로 설정
가다
ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [작성자]
삽입, 업데이트, 시작 시 삭제
카운트 없음 설정
EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'저자'
끝
가다
QUOTED_IDENTIFIER를 꺼짐으로 설정
가다
ANSI_NULLS를 ON으로 설정
가다
트리거에서 볼 수 있듯이 AspNet_SqlCacheUpdateChangeIdStoredProcedure 저장 프로시저는 작성자 테이블이 삽입, 삭제 및 업데이트될 때 실행됩니다. 이 저장 프로시저는 AspNet_SqlCacheTablesForChangeNotification 테이블에 레코드를 추가합니다. 기록은 다음과 같습니다.
tableName 알림생성된 변경 ID
작성자 2006-06-20 09:38:26.267 1
작성자의 데이터를 수정하면 변경 ID가 누적되고 다른 필드는 변경되지 않습니다.
그런 다음 web.config에 일부 콘텐츠를 추가하고 이를 사용할 수 있습니다.
먼저 데이터베이스 연결 문자열을 추가합니다.
<연결 문자열>
<추가 이름="pubsConString" ConnectionString="서버=localhost;database=pubs;uid=sa;pwd=mypassword;"/>
</connectionStrings>
두 번째로 캐시 섹션을 추가합니다.
<시스템.웹>
<캐싱>
<sqlCacheDependency 활성화="true">
<데이터베이스>
<이름 추가="pubs" ConnectionStringName="pubsConString" pollTime="900"/>
</데이터베이스>
</sqlCacheDependency>
</캐싱>
</system.web>
다음은 페이지가 로드될 때 다음 코드가 실행되는 테스트 코드입니다.
protected void Page_Load(object sender, EventArgs e) {
if (HttpContext.Current.Cache["xxx"] == null) {
SqlCacheDependency d = new SqlCacheDependency("pubs","authors");//pubs는 데이터베이스 섹션에 지정된 pub이고 그 뒤에 테이블 이름이 옵니다.
HttpContext.Current.Cache.Insert("xxx", "xxx", d);
Response.Write("새 캐시 생성 값은 xxx입니다.");
}
또 다른{
Response.Write("캐시에서 데이터 로드, 값은 "+HttpContext.Current.Cache["xxx"].ToString());
}
}
처음 열면 이 페이지가 표시됩니다:
새 캐시 생성 값은 xxx입니다.
페이지를 새로 고치면 다음이 표시됩니다.
캐시에서 데이터 로드, 값은 xxx입니다.
쿼리 분석기를 사용하여 작성자의 데이터를 수정하고 페이지를 다시 새로 고치면 다음이 표시됩니다.
새 캐시 생성 값은 xxx입니다.
이는 캐시가 정상적으로 작동하고 있음을 보여줍니다. 작성자 테이블이 변경되면 캐시의 내용이 자동으로 무효화되고 내 애플리케이션도 캐시 개체를 다시 생성합니다.
참고: SqlCacheDependency는 두 개의 생성자로 구성됩니다. SqlServer2000은 두 개의 매개 변수만 지원하고 하나의 매개 변수는 SqlServer2005를 지원합니다.