.NET 개발자가 애플리케이션에서 Couchbase를 더 잘 사용할 수 있도록 커뮤니티에서 지원하는 컬렉션이 있습니다. 카우치베이스 확장. 여기에는 캐싱, 세션, 멀티오, 압축 및 잠금을 위한 확장 기능이 포함됩니다. 그리고 공식적으로 지원되는 몇 가지 확장 기능도 있습니다. 종속성 주입, 오픈 원격 분석 및 트랜잭션.
오늘 논의할 주요 내용은 다음과 같습니다. Couchbase.Extensions.Caching를 구현하는 NET 분산 캐시 인터페이스 를 사용합니다. 다음을 사용하여 프로젝트에 추가할 수 있습니다. NuGet (닷넷 Couchbase.Extensions.Caching 패키지 추가).
최근 크루즈 업계에서 여러 애플리케이션을 관리하는 고객과 함께 일하고 있는데, 각 애플리케이션마다 캐싱 데이터를 별도로 저장하고 싶어합니다. 하지만 각 애플리케이션에 대해 완전히 새로운 버킷을 만드는 것은 지나친 작업입니다. 이 고객이 궁금해하는 것은 범위/컬렉션을 지정하는 방법이었습니다. Couchbase.Extensions.Caching 라이브러리.
세션 및 캐싱 확장 기능
최근 몇 년 동안 Couchbase SDK 2에서 SDK 3으로 전환하면서 다음과 같은 많은 새로운 기능과 개선 사항이 도입되었습니다. 범위/컬렉션 지원. . Couchbase.Extensions 제품군도 SDK 3을 지원하도록 업데이트되었습니다.
그러나 기본값 이 라이브러리의 사용법은 _기본값 범위 및 _기본값 컬렉션에는 다른 것을 지정할 수 있는 기본 옵션이 없습니다.
실제로 작동하는 것을 보려면 다음은 Couchbase를 분산 캐시로 추가하는 구성 라인입니다( GitHub 예제 프로젝트):
1 |
빌더.서비스.추가 분산 카우치베이스 캐시("myproject", opt => { }); |
해당 코드에서, 내 프로젝트 은 버킷 이름입니다. 버킷 이름은 opt 객체에는 범위/컬렉션 이름에 대한 옵션이 없습니다.
샘플 프로젝트를 사용하면 다음과 같은 캐시된 정보를 얻을 수 있습니다:
(버킷, 범위 및 컬렉션 이름은 다음과 같습니다. 내 프로젝트, _기본값및 _기본값).
확장 프로그램 확장
다행히도 라이브러리는 약간의 코드만 추가하면 원하는 컬렉션을 가리킬 수 있을 정도로 확장성이 뛰어납니다.
프로젝트에 대해 좀 더 자세히 살펴보겠습니다. ICouchbaseCacheCollectionProvider.cs 그리고 DefaultCouchbaseCacheCollectionProvider.cs
-
- ICouchbaseCacheCollectionProvider 에는 하나의 메서드가 포함되어 있습니다, GetCollectionAsync.
- 디폴트 카우치베이스 캐시 컬렉션 공급자의 를 사용하여 해당 메서드를 구현합니다: bucket.DefaultCollection()을 반환합니다;
하지만 기본 컬렉션을 사용하고 싶지 않다면 어떻게 해야 할까요?
이 경우 다음과 같은 사용자 정의 구현을 만듭니다. ICouchbaseCacheCollectionProvider. 내 전화로 전화할게요 사용자 지정 카우치베이스 캐시 컬렉션 공급자:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
사용 카우치베이스.키값; 네임스페이스 카우치베이스.확장 기능.캐싱.예.캐싱; public 클래스 사용자 지정 카우치베이스 캐시 컬렉션 공급자 : ICouchbaseCacheCollectionProvider { 비공개 읽기 전용 ICouchbaseCacheBucketProvider _버킷 공급자; 비공개 읽기 전용 문자열 범위 이름; 비공개 읽기 전용 문자열 _collectionName; public 사용자 지정 카우치베이스 캐시 컬렉션 공급자(ICouchbaseCacheBucketProvider 버킷 공급자, 문자열 범위 이름, 문자열 컬렉션 이름) { _버킷 공급자 = 버킷 공급자; 범위 이름 = 범위 이름; _collectionName = 컬렉션 이름; } public 비동기 ValueTask<ICouchbaseCollection> GetCollectionAsync() { var 버킷 = 기다림 _버킷 공급자.GetBucketAsync().구성대기(false); var 범위 = 기다림 버킷.ScopeAsync(범위 이름); 반환 기다림 범위.CollectionAsync(_collectionName); } } |
이것이 시작점이라고 생각하세요. 구현에서는 원하는 대로 설정하고 추가 로직을 추가하는 등의 작업을 수행할 수 있습니다.
다음 단계는 이를 서비스로 추가하는 것입니다( Program.cs 일반적으로 범위/컬렉션 이름을 지정합니다:
1 2 3 4 5 |
빌더.서비스.추가싱글톤<ICouchbaseCacheCollectionProvider>(x => new 사용자 지정 카우치베이스 캐시 컬렉션 공급자( x.GetRequiredService<ICouchbaseCacheBucketProvider>(), "mycachingscope", "mycachingcollection")); |
기본 공급자가 덮어쓰는 것이 우려되는 경우 다음 사항에 유의하세요. 시도 추가 싱글톤 는 내부에서 사용 추가 분산 카우치베이스 캐시. 이는 곧 하지 않습니다. 사용자 정의 공급자를 기본 공급자로 재정의합니다.
실제 사용자 지정 공급자
이 확장 프로그램은 실제로 지정된 범위와 컬렉션을 생성하지 않으므로 미리 생성했는지 확인하세요.
앱을 실행하고 OpenAPI 대화형 페이지에서 일기 예보 API를 사용해 보세요. 엔드포인트를 처음 실행하면 "캐시 미스"가 발생하며, 이 시점에서 일기 예보 데이터가 지정된 컬렉션에 기록됩니다:
(버킷, 범위 및 컬렉션 이름은 다음과 같습니다. 내 프로젝트, 마이캐싱 범위및 마이캐싱 컬렉션).
요약
인터페이스를 사용자 정의로 구현하고 Program.cs를 사용하여 캐시된 데이터를 저장할 범위/컬렉션을 지정할 수 있습니다.
또한 Couchbase.Extensions.Session 확장자는 캐싱 확장을 기본 스토리지 메커니즘으로 사용합니다.
-
- 행복한 캐싱! 소스 코드는 GitHub에서 사용할 수 있습니다..
- NET에 대한 자세한 내용은 카우치베이스 .NET 포럼 그리고 .NET SDK 문서.
- 캐싱, 세션 또는 아키텍처 전반에 대한 질문이 있는 경우 다음을 확인하세요. 카우치베이스 디스코드.