Para ayudar a los desarrolladores de .NET a utilizar mejor Couchbase en sus aplicaciones, existe una colección de aplicaciones soportadas por la comunidad Extensiones Couchbase. Estas incluyen extensiones para caché, sesión, multioperación, compresión y bloqueo. Y hay algunas extensiones soportadas oficialmente para inyección de dependenciastelemetría abierta y transacciones.

La principal ampliación a debate hoy es Couchbase.Extensions.Cachingque implementa la Interfaz de caché distribuida .NET utilizando Couchbase. Esto se puede añadir a su proyecto con NuGet (dotnet add package Couchbase.Extensions.Caching).

Recientemente, estuve trabajando con un cliente del sector de los cruceros que gestiona varias aplicaciones y desea almacenar datos en caché por separado para cada aplicación. Sin embargo, crear un bucket completamente nuevo para cada aplicación es excesivo. Se preguntaban cómo especificar un ámbito/colección cuando se utiliza la función Couchbase.Extensions.Caching biblioteca.

Extensiones de sesión y caché

En los últimos años, el cambio de Couchbase SDK 2 a SDK 3 introdujo muchas nuevas características y mejoras, incluyendo soporte de ámbitos/colecciones. En Couchbase.Extensiones también se ha actualizado para que sea compatible con el SDK 3.

Sin embargo, el por defecto de esta biblioteca utiliza el Por defecto alcance y Por defecto sin opción de especificar nada más.

Para ver esto en acción, aquí está la línea de configuración para añadir Couchbase como una caché distribuida (tomada del archivo Proyecto de ejemplo en GitHub):

En ese código, miproyecto es un nombre de cubo. La dirección op no tiene una opción para el nombre de ámbito/colección.

Si utilizas el proyecto de ejemplo, obtendrás información en caché como ésta:

(Observe que los nombres de cubo, ámbito y colección son miproyecto, Por defectoy Por defecto).

Ampliación de la extensión

Afortunadamente, la biblioteca es lo suficientemente extensible como para que, con un poco de código, se pueda apuntar a cualquier colección que se desee.

Profundicemos un poco más en el proyecto, en concreto ICouchbaseCacheCollectionProvider.cs y DefaultCouchbaseCacheCollectionProvider.cs

    • ICouchbaseCacheCollectionProvider contiene un método, GetCollectionAsync.
    • DefaultCouchbaseCacheCollectionProvider's implementa ese método con: return cubo.ColecciónPorDefecto();

Pero, ¿y si no quieres utilizar la colección por defecto?

En ese caso, cree una implementación personalizada de ICouchbaseCacheCollectionProvider. Llamaré al mío CustomCouchbaseCacheCollectionProvider:

Considérelo un punto de partida. En su implementación, puede configurarlo como desee, añadir lógica adicional, etc.

El siguiente paso es añadirlo como servicio (en Programa.cs típicamente), especificando los nombres de ámbito/colección:

Si le preocupa que esto sea sobrescrito por el proveedor predeterminado, tenga en cuenta que TryAddSingleton es utilizado dentro de AddDistributedCouchbaseCache. Esto significa que no sustituya su proveedor personalizado por el proveedor predeterminado.

Proveedor personalizado en acción

Esta extensión no creará realmente el ámbito y la colección especificados, así que asegúrese de haberlos creado con antelación.

Ejecute la aplicación y pruebe la API de previsión meteorológica con la página interactiva OpenAPI. La primera vez que se ejecute el endpoint se producirá un "fallo de caché", momento en el que los datos de la previsión meteorológica se escribirán en la colección especificada:

(Observe que los nombres de cubo, ámbito y colección son miproyecto, mycachingscopey mycachingcollection).

Resumen

Con una implementación personalizada de una interfaz, y una línea extra en Programa.cspuede especificar el ámbito/colección en el que desea almacenar los datos en caché.

Además, el Couchbase.Extensions.Session utiliza la extensión de caché como mecanismo de almacenamiento subyacente.

Autor

Publicado por Matthew Groves

A Matthew D. Groves le encanta programar. No importa si se trata de C#, jQuery o PHP: enviará pull requests para cualquier cosa. Lleva codificando profesionalmente desde que escribió una aplicación de punto de venta en QuickBASIC para la pizzería de sus padres, allá por los años noventa. Actualmente trabaja como Director de Marketing de Producto para Couchbase. Su tiempo libre lo pasa con su familia, viendo a los Reds y participando en la comunidad de desarrolladores. Es autor de AOP in .NET, Pro Microservices in .NET, autor de Pluralsight y MVP de Microsoft.

Dejar una respuesta