Natural .NET APIs
Real return types, honest nullability, TimeSpan-based expiry, and async streams. Protocol details stay below the surface.
Fast, typed, async-first access to Redis, Valkey, KeyDB, and other RESP-compatible servers—with built-in server-assisted caching for hot Redis reads.
await using var redis = await
RespireClient.ConnectAsync("redis://localhost");
await redis.SetAsync(
"greeting",
"hello",
expiry: TimeSpan.FromMinutes(5));
string? greeting = await
redis.GetStringAsync("greeting");Respire handles connection choreography so your code can speak in the language of your domain.
Real return types, honest nullability, TimeSpan-based expiry, and async streams. Protocol details stay below the surface.
Redis-assisted client caching serves eligible reads from bounded process memory and evicts them from RESP3 invalidation pushes.
Reconnects, resubscribing pub/sub, OpenTelemetry, dependency injection, typed serialization, and caching adapters included.
Enable one option. Respire stores eligible responses in bounded process memory while Redis tells it exactly when tracked keys change. No cache-aside wrappers, notification channels, or application invalidation handlers.
await using var redis = await
RespireClient.ConnectAsync(new RespireOptions
{
Endpoints = { new("localhost") },
ClientSideCache = new(),
});
// Same API. First call misses; hot reads stay local.
string? name = await redis.GetStringAsync("user:42:name");net10 BenchmarkDotNet short run. Cache hit versus server read; uncached clients measured statistically the same.
Respire routes blocking list and stream operations through dedicated pooled connections. Normal traffic keeps moving.
string? job = await redis.Lists.LeftPopAsync(
"jobs",
waitFor: TimeSpan.FromSeconds(30));Build a work queue →Explore core concepts, production integrations, and every escape hatch.
Read the quickstart →