Skip to content
Docs Try Aspire
Docs Try

Set up Valkey in the AppHost

Valkey logo

This article is the reference for the Aspire Valkey Hosting integration. It enumerates the AppHost APIs — with examples for both AppHost.cs and apphost.ts — that you use to model a Valkey resource in your AppHost project.

If you’re new to the Valkey integration, start with the Get started with Valkey integrations guide. For how consuming apps read the connection information this page exposes, see Connect to Valkey.

To start building an Aspire app that uses Valkey, install the 📦 Aspire.Hosting.Valkey NuGet package:

Terminal
aspire add valkey

Learn more about aspire add in the command reference.

Or, choose a manual installation approach:

C# — AppHost.cs
#:package Aspire.Hosting.Valkey@*
XML — AppHost.csproj
<PackageReference Include="Aspire.Hosting.Valkey" Version="*" />

Once you’ve installed the hosting integration in your AppHost project, you can add a Valkey resource as shown in the following examples:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddValkey("cache");
var exampleProject = builder.AddProject<Projects.ExampleProject>("apiservice")
.WithReference(cache);
// After adding all resources, run the app...
  1. When Aspire adds a container image to the AppHost, as shown in the preceding example with the docker.io/valkey/valkey image, it creates a new Valkey instance on your local machine.

  2. The Valkey resource is configured with a randomly generated password by default. To set an explicit password, see Add Valkey resource with parameters.

  3. The AppHost reference call configures a connection in the consuming project named after the referenced Valkey resource, such as cache in the preceding example.

Add a data volume to the Valkey resource as shown in the following examples:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddValkey("cache")
.WithDataVolume(isReadOnly: false);
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(cache);
// After adding all resources, run the app...

The data volume is used to persist Valkey data outside the lifecycle of its container. The data volume is mounted at the /data path in the Valkey container, and when a name parameter isn’t provided, the name is generated at random. Calling WithDataVolume (or withDataVolume) also enables Valkey persistence so the in-memory state survives container restarts. For more information on data volumes and details on why they’re preferred over bind mounts, see Docker docs: Volumes.

Add a data bind mount to the Valkey resource as shown in the following examples:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddValkey("cache")
.WithDataBindMount(
source: "/Valkey/Data",
isReadOnly: false);
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(cache);
// After adding all resources, run the app...

Data bind mounts rely on the host machine’s filesystem to persist Valkey data across container restarts. The data bind mount is mounted at the C:\Valkey\Data on Windows (or /Valkey/Data on Unix) path on the host machine in the Valkey container. As with WithDataVolume, this call also enables persistence. For more information on data bind mounts, see Docker docs: Bind mounts.

To configure Valkey snapshot persistence explicitly, call WithPersistence (or withPersistence) alongside a data volume or bind mount:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddValkey("cache")
.WithDataVolume()
.WithPersistence(
interval: TimeSpan.FromMinutes(5),
keysChangedThreshold: 100);
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(cache);
// After adding all resources, run the app...

The preceding code adds explicit persistence to the Valkey resource by snapshotting data at the configured interval whenever the configured number of keys changes. The C# AppHost accepts a TimeSpan for interval; the TypeScript AppHost accepts the same value as milliseconds.

When you want to explicitly provide the port and password used by the Valkey container, you can pass them as parameters:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var password = builder.AddParameter("password", secret: true);
var cache = builder.AddValkey("cache", port: 6379, password: password);
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(cache);
// After adding all resources, run the app...

When no password parameter is provided, Aspire generates a strong password automatically using the CreateDefaultPasswordParameter method.

By default, Aspire injects the Valkey connection information using variable names derived from the resource name (for example, CACHE_URI, CACHE_HOST, CACHE_PORT, CACHE_PASSWORD). If your consuming app expects a different set of environment variable names, pass individual connection properties from the AppHost:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddValkey("cache");
var app = builder.AddExecutable("my-app", "node", "app.js", ".")
.WithReference(cache)
.WithEnvironment(context =>
{
context.EnvironmentVariables["VALKEY_HOST"] = cache.Resource.PrimaryEndpoint.Property(EndpointProperty.Host);
context.EnvironmentVariables["VALKEY_PORT"] = cache.Resource.PrimaryEndpoint.Property(EndpointProperty.Port);
context.EnvironmentVariables["VALKEY_PASSWORD"] = cache.Resource.PasswordParameter;
});
builder.Build().Run();

In C#, call AsExisting instead of AddValkey to reference an externally managed Valkey instance:

C# — AppHost.cs
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddValkey("cache")
.AsExisting(connectionStringParameter: builder.AddParameter("cache-cs", secret: true));
var exampleProject = builder.AddProject<Projects.ExampleProject>()
.WithReference(cache);
// After adding all resources, run the app...

For the full reference of Valkey connection properties — and how consuming apps in C#, TypeScript, Python, and Go read them — see Connect to Valkey.

The Valkey hosting integration automatically adds a health check for the Valkey resource. The health check verifies that the Valkey instance is running and that a connection can be established to it.

The hosting integration relies on the 📦 AspNetCore.HealthChecks.Redis NuGet package, which works for Valkey because it speaks the Redis serialization protocol.