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 Postgres. 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)
}
})
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",