Natural .NET APIs
Real return types, honest nullability, TimeSpan-based expiry, and async streams. Protocol details stay below the surface.
Meet the APIA modern RESP client that feels like C#.
Fast, typed, async-first. From your first connection to your hottest Redis reads.
using Respire;
await using var redis = await
RespireClient.ConnectAsync("redis://localhost");
await redis.SetAsync(
"greeting", "hello",
expiry: TimeSpan.FromMinutes(5));
string? greeting = await
redis.GetStringAsync("greeting");
using Respire;
await using var redis = await
RespireClient.ConnectAsync("redis://localhost");
await redis.SetAsync("user:ada", new User("Ada", 7));
User? user = await redis.GetAsync<User>("user:ada");
public sealed record User(string Name, int LoginCount);
using Respire;
await using var redis = await
RespireClient.ConnectAsync(new RespireOptions
{
Endpoints = { new("localhost") },
ClientSideCache = new(),
});
string? name = await
redis.GetStringAsync("user:42:name");
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.
Meet the APIRedis-assisted client caching serves eligible reads from bounded process memory and evicts them from RESP3 invalidation pushes.
Explore client cachingReconnects, resubscribing pub/sub, OpenTelemetry, dependency injection, typed serialization, and caching adapters included.
Wire up your serviceEnable 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.
Cache hit? No network round trip.
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));
Explore core concepts, production integrations, and every escape hatch.
Read the quickstart →