Para ajudar os desenvolvedores de .NET a usar melhor o Couchbase em seus aplicativos, há uma coleção de aplicativos compatíveis com a comunidade Extensões do Couchbase. Isso inclui extensões para cache, sessão, multiop, compactação e bloqueio. E há algumas extensões oficialmente suportadas para injeção de dependência, telemetria aberta e transações.

A principal extensão a ser discutida hoje é Couchbase.Extensions.Cachingque implementa o Interface do cache distribuído do .NET usando o Couchbase. Isso pode ser adicionado ao seu projeto com NuGet (dotnet add package Couchbase.Extensions.Caching).

Recentemente, trabalhei com um cliente do setor de cruzeiros que está gerenciando vários aplicativos e deseja armazenar dados de cache separadamente para cada aplicativo. No entanto, criar um bucket totalmente novo para cada aplicativo é um exagero. Eles estavam se perguntando como especificar um escopo/coleção ao usar o Couchbase.Extensions.Caching biblioteca.

Extensões de sessão e de cache

Nos últimos anos, a mudança do Couchbase SDK 2 para o SDK 3 introduziu muitos novos recursos e aprimoramentos, incluindo Suporte a escopos/coleções. O Couchbase.Extensions A família também foi atualizada para oferecer suporte ao SDK 3.

No entanto, o padrão O uso dessa biblioteca usa o Padrão escopo e Padrão sem nenhuma opção integrada para especificar qualquer outra coisa.

Para ver isso em ação, aqui está a linha de configuração para adicionar o Couchbase como um cache distribuído (extraído do arquivo Projeto de exemplo do GitHub):

Nesse código, meu projeto é um nome de bucket. O optar não tem uma opção para o nome do escopo/coleção.

Usando o projeto de amostra, você terá informações em cache como estas:

(Observe que os nomes do bucket, do escopo e da coleção são meu projeto, Padrãoe Padrão).

Extensão da extensão

Felizmente, a biblioteca é extensível o suficiente para que, com um pouco de código, ela possa ser apontada para qualquer coleção que você queira.

Vamos examinar um pouco mais a fundo o projeto, especificamente ICouchbaseCacheCollectionProvider.cs e DefaultCouchbaseCacheCollectionProvider.cs

    • ICouchbaseCacheCollectionProvider contém um método, GetCollectionAsync.
    • A função implementa esse método com: return bucket.DefaultCollection();

Mas e se você não quiser usar a coleção padrão?

Nesse caso, crie uma implementação personalizada de ICouchbaseCacheCollectionProvider. Vou ligar para o meu Provedor CustomCouchbaseCacheCollection:

Considere isso como um ponto de partida. Em sua implementação, você pode configurá-lo como quiser, adicionar lógica adicional, etc.

A próxima etapa é adicionar isso como um serviço (em Program.cs normalmente), especificando os nomes de escopo/coleção:

Se você estiver preocupado com o fato de isso ser substituído pelo provedor padrão, observe que TryAddSingleton é usado dentro de AddDistributedCouchbaseCache. Isso significa que não vai substitua seu provedor personalizado pelo provedor padrão.

Provedor personalizado em ação

Essa extensão não criará de fato o escopo e a coleção especificados, portanto, certifique-se de que você os tenha criado com antecedência.

Execute o aplicativo e experimente a API de previsão do tempo com a página interativa OpenAPI. A primeira vez que executar o ponto de extremidade resultará em uma "falha de cache", e nesse ponto os dados da previsão do tempo serão gravados na coleção especificada:

(Observe que os nomes do bucket, do escopo e da coleção são meu projeto, mycachingscopee mycachingcollection).

Resumo

Com uma implementação personalizada de uma interface e uma linha extra no Program.csSe você quiser armazenar dados em cache, poderá especificar o escopo/coleção em que deseja armazená-los.

Além disso, o Couchbase.Extensions.Session usa a extensão de cache como o mecanismo de armazenamento subjacente.

Autor

Postado por Matthew Groves

Matthew D. Groves é um cara que adora programar. Não importa se é C#, jQuery ou PHP: ele enviará solicitações de pull para qualquer coisa. Ele tem programado profissionalmente desde que escreveu um aplicativo de ponto de venda QuickBASIC para a pizzaria de seus pais nos anos 90. Atualmente, ele trabalha como gerente sênior de marketing de produtos da Couchbase. Seu tempo livre é passado com a família, assistindo aos Reds e participando da comunidade de desenvolvedores. Ele é autor de AOP in .NET, Pro Microservices in .NET, autor da Pluralsight e Microsoft MVP.

Deixar uma resposta