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 := StartContainer(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 StartContainer(ctx context.Context, opts ...RedisContainerOption) (*RedisContainer, error)
context.Context
, the Go context.RedisContainerOption
, a variad 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 WithImage
with a valid Docker image
for Postgres. E.g. WithImage("docker.io/redis:7")
.
redisContainer, err := StartContainer(ctx, 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 := StartContainer(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 := StartContainer(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 := StartContainer(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",