TL.Caching.Helpers
0.2.0
See the version list below for details.
dotnet add package TL.Caching.Helpers --version 0.2.0
NuGet\Install-Package TL.Caching.Helpers -Version 0.2.0
<PackageReference Include="TL.Caching.Helpers" Version="0.2.0" />
<PackageVersion Include="TL.Caching.Helpers" Version="0.2.0" />
<PackageReference Include="TL.Caching.Helpers" />
paket add TL.Caching.Helpers --version 0.2.0
#r "nuget: TL.Caching.Helpers, 0.2.0"
#:package TL.Caching.Helpers@0.2.0
#addin nuget:?package=TL.Caching.Helpers&version=0.2.0
#tool nuget:?package=TL.Caching.Helpers&version=0.2.0
⚡ TL.Caching.Helpers
High-performance multilevel caching library for .NET: L1/L2 hybrid cache, RedLock stampede protection, GZip compression, and tenant partitioning.
Biblioteca de caching multinível de alta performance para .NET: cache híbrido L1/L2, proteção contra cache stampede com RedLock, compressão GZip e particionamento por tenant.
O TL.Caching.Helpers disponibiliza uma camada de cache corporativa completa, combinando cache em memória ultrarrápido (L1) com cache distribuído resiliente no Redis (L2). Conta com mecanismos avançados de Distributed Locking (RedLock) para erradicar o problema de Cache Stampede, compressão de tráfego e suporte nativo a isolamento multi-tenant.
📦 Instalação
Adicione o pacote ao seu projeto através do .NET CLI:
dotnet add package TL.Caching.Helpers
🚀 Funcionalidades Principais
| Categoria | Componentes & Métodos | Descrição |
|---|---|---|
| Cache Híbrido Multinível | IHierarchicalCacheService |
Consulta em memória (L1); em caso de miss, busca no Redis (L2) e repovoa o L1 de forma transparente. |
| Proteção Anti-Stampede | LockedCacheService |
Implementação de lock distribuído (Double-Checked Locking) via RedLock, impedindo que milhares de requisições sobrecarreguem o banco ao expirar uma chave. |
| Compressão de Dados | CompressionHelper (GZip) |
Compactação automática de payloads volumosos antes da gravação no Redis, economizando tráfego de rede e memória. |
| Particionamento por Regiões | region, tenantId |
Agrupamento lógico de chaves para invalidação em lote e isolamento seguro de múltiplos clientes. |
| Controle de Vazão | AddThrottledCache() |
Integração fluente com políticas de resiliência e limitação de requisições baseadas em Polly. |
💡 Exemplos de Uso
1. Injeção de Dependência no Program.cs
using Caching.Helpers.Extensions;
// Registra Redis distribuído
builder.Services.AddRedisCache(builder.Configuration);
// Registra Cache Hierárquico L1 (Memory) + L2 (Redis)
builder.Services.AddHierarchicalCache(builder.Configuration);
2. Consulta Segura contra Cache Stampede
using Caching.Helpers.Services;
public class CatalogoService
{
private readonly LockedCacheService _cacheService;
public CatalogoService(LockedCacheService cacheService)
{
_cacheService = cacheService;
}
public async Task<List<ProdutoDto>> ObterProdutosDestaqueAsync()
{
return await _cacheService.GetOrSetWithLockAsync(
key: "produtos:destaque",
factory: async () => await CarregarDoBancoDeDadosAsync(),
expiration: TimeSpan.FromMinutes(10)
);
}
private static async Task<List<ProdutoDto>> CarregarDoBancoDeDadosAsync()
{
await Task.Delay(50);
return new List<ProdutoDto>
{
new("Notebook Corporativo", 4500.00m),
new("Monitor UltraWide", 1800.00m)
};
}
}
public record ProdutoDto(string Nome, decimal Preco);
🏛️ Decisões Arquiteturais e Segurança
Para detalhes sobre locking distribuído, arquitetura de camadas e mitigação de latência:
📄 Licença
Distribuído sob a licença MIT.
| Product | Versions 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 was computed. 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. |
-
net8.0
- Apache.Ignite (>= 2.16.0)
- EntityFrameworkCore.NCache (>= 5.3.4)
- EnyimMemcachedCore (>= 3.2.4)
- Microsoft.Data.SqlClient (>= 5.2.2)
- Microsoft.Data.Sqlite.Core (>= 9.0.0)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Caching.Memory (>= 9.0.0)
- Microsoft.Extensions.Caching.StackExchangeRedis (>= 9.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Options (>= 9.0.0)
- Polly (>= 8.5.0)
- prometheus-net (>= 8.2.1)
- RedLock.net (>= 2.3.2)
-
net9.0
- Apache.Ignite (>= 2.16.0)
- EntityFrameworkCore.NCache (>= 5.3.4)
- EnyimMemcachedCore (>= 3.2.4)
- Microsoft.Data.SqlClient (>= 5.2.2)
- Microsoft.Data.Sqlite.Core (>= 9.0.0)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Caching.Memory (>= 9.0.0)
- Microsoft.Extensions.Caching.StackExchangeRedis (>= 9.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Options (>= 9.0.0)
- Polly (>= 8.5.0)
- prometheus-net (>= 8.2.1)
- RedLock.net (>= 2.3.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.