Guia — ICacheProvider
Um cache novo, ativado por provider: num spec.caches. Só existe um recurso de cache por
aplicação — a rota nunca precisa apontar para qual, só declara cache:.
Exemplo mínimo
using System.Text.Json.Nodes;
using Pipevine.Abstractions;
using Pipevine.Caching.Abstractions;
// A chave usada no YAML: `provider: acmecache`
[Provider("acmecache", ProviderKind.Cache)]
public sealed class AcmeCacheProvider : ICacheProvider
{
public ValueTask<JsonNode?> GetAsync(string key, CancellationToken ct) { /* ... */ }
public ValueTask SetAsync(string key, JsonNode value, CacheEntryOptions options, CancellationToken ct)
{
// options.AbsoluteTtl / options.SlidingTtl podem ser null (sem expiração).
// options.Tags alimenta RemoveByTagAsync.
}
public ValueTask RemoveAsync(string key, CancellationToken ct) { /* ... */ }
public ValueTask RemoveByTagAsync(string tag, CancellationToken ct) { /* ... */ }
}
Ativação
spec:
caches:
- { id: main, provider: acmecache }
routes:
- id: getItem
cache:
key: "'item:' & input.route.itemId"
ttl: 1m
tags: [items]
services.AddKeyedSingleton<ICacheProvider, AcmeCacheProvider>("acmecache");
// mais services.AddPipevineCaching() do core
Um provider que não suporta invalidação por tag declara isso na própria documentação — o build só
avisa se o YAML usar tags:, não falha.
Para onde ir daqui
- Visão geral de extensibilidade
- Cache — como
caches/cache.*/o blococache:da rota são usados do ponto de vista de quem consome, não implementa, um provider de cache.