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):
1 |
constructor.Servicios.AddDistributedCouchbaseCache("miproyecto", op => { }); |
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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
utilizando Couchbase.ClaveValor; espacio de nombres Couchbase.Extensiones.Almacenamiento en caché.Ejemplo.Almacenamiento en caché; público clase CustomCouchbaseCacheCollectionProvider : ICouchbaseCacheCollectionProvider { privado sólo lectura ICouchbaseCacheBucketProvider _bucketProvider; privado sólo lectura cadena Nombre del ámbito; privado sólo lectura cadena Nombre de la colección; público CustomCouchbaseCacheCollectionProvider(ICouchbaseCacheBucketProvider bucketProvider, cadena scopeName, cadena collectionName) { _bucketProvider = bucketProvider; Nombre del ámbito = scopeName; Nombre de la colección = collectionName; } público async ValorTarea<ICouchbaseCollection> GetCollectionAsync() { var cubo = await _bucketProvider.GetBucketAsync().ConfigureAwait(falso); var alcance = await cubo.ScopeAsync(Nombre del ámbito); devolver await alcance.ColecciónAsync(Nombre de la colección); } } |
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:
1 2 3 4 5 |
constructor.Servicios.AñadirSingleton<ICouchbaseCacheCollectionProvider>(x => nuevo CustomCouchbaseCacheCollectionProvider( x.GetRequiredService<ICouchbaseCacheBucketProvider>(), "mycachingscope", "mycachingcollection")); |
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.
-
- ¡Feliz caché! El código fuente está disponible en GitHub.
- Para más información sobre .NET, consulte el Foro Couchbase .NET y Documentación del SDK de .NET.
- Si tiene preguntas sobre el almacenamiento en caché, las sesiones o la arquitectura en general, consulte la sección Couchbase Discord.