CacheGraph 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package CacheGraph --version 1.0.0
                    
NuGet\Install-Package CacheGraph -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CacheGraph" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CacheGraph" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="CacheGraph" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CacheGraph --version 1.0.0
                    
#r "nuget: CacheGraph, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CacheGraph@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CacheGraph&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=CacheGraph&version=1.0.0
                    
Install as a Cake Tool

CacheGraph 🧠🔗

Cache-aside con grafo de dependencias e invalidación en cascada para .NET

CacheGraph es una librería que combina el patrón cache-aside con un grafo de dependencias entre claves de caché y entidades de negocio, permitiendo invalidación en cascada: al modificar una entidad, todas las claves de caché que dependen de ella se eliminan automáticamente.

📦 Instalación

dotnet add package CacheGraph.Core

✨ Características

  • Cache-aside con GetOrSetAsync — carga bajo demanda con factory
  • Grafo de dependencias — relaciones cache-key ↔ entidad bidireccionales
  • Invalidación en cascada — elimina todas las entradas que dependen de una entidad
  • Protección contra stampede — bloqueo distribuido para que solo un hilo ejecute el factory
  • 8 interfaces para extender cada componente (cache, grafo, lock, publicador, métricas)
  • EventosCacheSetEvent, CacheRemovedEvent, EntityInvalidatedEvent
  • Métricas — hits, misses, sets, removes, tiempo de operaciones
  • Multi-plataforma — .NET 8, .NET 9 y .NET 10
  • Sin dependencias externas — solo BCL estándar de .NET

🚀 Inicio rápido

using CacheGraph.Core;
using CacheGraph.Core.Implementaciones;
using CacheGraph.Core.Interfaces;

// Crear el cache graph con implementaciones en memoria
var cacheGraph = new CacheGraph(
    cacheProvider: new MemoryCacheProvider(),
    graphProvider: new MemoryGraphProvider(),
    distributedLock: new MemoryDistributedLock(),
    eventPublisher: new MemoryEventPublisher(),
    metricsRecorder: new MemoryMetricsRecorder(),
    options: new GraphOptions
    {
        DefaultTtl = TimeSpan.FromMinutes(10)
    });

// Registrar entidades en el grafo
await cacheGraph.GraphProvider.AddNodeAsync(
    new Node { Id = "entity:Product:42", Type = NodeType.Entity });

// Cache-aside con dependencias
var product = await cacheGraph.GetOrSetAsync(
    "product:42",
    factory: () => LoadProductFromDbAsync(42),
    dependencies: ["entity:Product:42"],
    ttl: TimeSpan.FromMinutes(5));

// Invalidar entidad → se elimina product:42 automáticamente
await cacheGraph.InvalidateEntityAsync("Product", "42");

// Consultar dependencias y dependientes
var deps = await cacheGraph.GetDependenciesAsync("product:42");
var dependents = await cacheGraph.GetDependentsAsync("entity:Product:42");

🏗️ Arquitectura

┌─────────────────────────────────────────────────┐
│                  CacheGraph                      │
│              ( façade principal )                 │
├──────────┬──────────┬───────────┬────────────────┤
│ ICache   │ IGraph   │ IDistLock │ IEventPublisher│
│ Provider │ Provider │           │                │
├──────────┴──────────┴───────────┴────────────────┤
│              IMetricsRecorder                     │
└─────────────────────────────────────────────────┘

Flujo de datos:

entity:Product:42  ◄────  product:42  ───►  products:featured
                    ▲        (dep)          (dep)
                    │
              cart:user:42
                (dep)

Las aristas van cache-key → entidad (la clave depende de la entidad).

📊 Interfaces disponibles

Interfaz Propósito
ICacheProvider Almacenamiento clave-valor
IGraphProvider Grafo de nodos y aristas
IDistributedLock Bloqueo distribuido (stampede)
IEventPublisher Publicación de eventos
IMetricsRecorder Registro de métricas
ICacheGraph Fachada principal
ICacheEntry Entrada individual de caché
IGraph Vista de solo lectura del grafo

🧪 Tests

dotnet test

182 tests con xUnit + FluentAssertions, ~88% cobertura.

🎯 Demo

dotnet run --project CacheGraph.Demo

La aplicación de demo muestra todos los escenarios:

  • Cache-aside (miss + hit)
  • Caché de listados con múltiples dependencias
  • Caché de perfil de usuario
  • Caché de carrito de compras
  • Grafo de dependencias completo
  • Invalidación en cascada
  • Protección contra stampede

📄 Licencia

MIT License — ver LICENSE para más detalles.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.
  • net8.0

    • No dependencies.
  • net9.0

    • No dependencies.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on CacheGraph:

Package Downloads
CacheGraph.Extensions

Dependency Injection, Microsoft.Extensions.Logging, and IMemoryCache/IDistributedCache integration for CacheGraph

CacheGraph.Redis

Redis providers for CacheGraph — distributed cache, graph storage, distributed locks, and pub/sub event invalidation

CacheGraph.Attributes

Declarative attribute-based caching for CacheGraph via reflection-based proxies

CacheGraph.EntityFrameworkCore

Automatic query caching, economic thresholds, and cascade invalidation for Entity Framework Core via CacheGraph dependency graph

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.0 88 8/21/2026
1.0.0 118 8/6/2026