Skip to content

Redis

Since testcontainers-go v0.20.0

Introduction

The Testcontainers module for Redis.

Adding this module to your project dependencies

Please run the following command to add the Redis module to your Go dependencies:

go get github.com/testcontainers/testcontainers-go/modules/redis

Usage example

redisContainer, err := RunContainer(ctx)
require.NoError(t, err)
t.Cleanup(func() {
    if err := redisContainer.Terminate(ctx); err != nil {
        t.Fatalf("failed to terminate container: %s", err)
    }
})

Module Reference

The Redis module exposes one entrypoint function to create the containerr, and this function receives two parameters:

func RunContainer(ctx context.Context, opts ...testcontainers.ContainerCustomizer) (*RedisContainer, error)
  • context.Context, the Go context.
  • testcontainers.ContainerCustomizer, a variadic argument for passing options.

Container Options

When starting the Redis container, you can pass options in a variadic way to configure it.

Tip

You can find all the available configuration and environment variables for the Redis Docker image on Docker Hub.

Image

If you need to set a different Redis Docker image, you can use testcontainers.WithImage with a valid Docker image for Redis. E.g. testcontainers.WithImage("docker.io/redis:7").

redisContainer, err := RunContainer(ctx, testcontainers.WithImage(tt.image), WithConfigFile(filepath.Join("testdata", "redis6.conf")))
require.NoError(t, err)
t.Cleanup(func() {
    if err := redisContainer.Terminate(ctx); err != nil {
        t.Fatalf("failed to terminate container: %s", err)
    }
})

Wait Strategies

If you need to set a different wait strategy for Redis, you can use testcontainers.WithWaitStrategy with a valid wait strategy for Redis.

Info

The default deadline for the wait strategy is 60 seconds.

At the same time, it's possible to set a wait strategy and a custom deadline with testcontainers.WithWaitStrategyAndDeadline.

Docker type modifiers

If you need an advanced configuration for Redis, you can leverage the following Docker type modifiers:

  • testcontainers.WithConfigModifier
  • testcontainers.WithHostConfigModifier
  • testcontainers.WithEndpointSettingsModifier

Please read the Create containers: Advanced Settings documentation for more information.

Snapshotting

By default Redis saves snapshots of the dataset on disk, in a binary file called dump.rdb. You can configure Redis to have it save the dataset every N seconds if there are at least M changes in the dataset.

Tip

Please check Redis docs on persistence for more information.

redisContainer, err := RunContainer(ctx, WithSnapshotting(10, 1))
require.NoError(t, err)
t.Cleanup(func() {
    if err := redisContainer.Terminate(ctx); err != nil {
        t.Fatalf("failed to terminate container: %s", err)
    }
})

Log Level

By default Redis saves snapshots of the dataset on disk, in a binary file called dump.rdb. You can configure Redis to have it save the dataset every N seconds if there are at least M changes in the dataset.

Tip

Please check Redis docs on logging for more information.

redisContainer, err := RunContainer(ctx, WithLogLevel(LogLevelVerbose))
require.NoError(t, err)
t.Cleanup(func() {
    if err := redisContainer.Terminate(ctx); err != nil {
        t.Fatalf("failed to terminate container: %s", err)
    }
})

Redis configuration

In the case you have a custom config file for Redis, it's possible to copy that file into the container before it's started.

redisContainer, err := RunContainer(ctx, WithConfigFile(filepath.Join("testdata", "redis7.conf")))
require.NoError(t, err)
t.Cleanup(func() {
    if err := redisContainer.Terminate(ctx); err != nil {
        t.Fatalf("failed to terminate container: %s", err)
    }
})

Container Methods

ConnectionString

This method returns the connection string to connect to the Redis container, using the default 6379 port.

uri, err := redisContainer.ConnectionString(ctx)
require.NoError(t, err)

Redis variants

It's possible to use the Redis container with Redis-Stack. You simply need to update the image name.

image: "docker.io/redis/redis-stack:latest",
image: "docker.io/redis/redis-stack-server:latest",