In this quickstart, you’ll create a real-time data pipeline that streams changes from a Postgres database to a Redis database. You’ll:

  • Boot Sequin
  • Connect to a sample playground database
  • Configure Redis to receive database changes
  • See your changes flow in real-time

By the end, you’ll have hands-on experience setting up Postgres change data capture (CDC) to Redis with Sequin.

This guide is for Redis Strings which use SET and DEL to maintain a cache. If you want to use Redis Streams, see our Redis Streams quickstart.

Boot Redis

If you don’t already have Redis running, start Redis with Docker:

docker run --name redis -p 6379:6379 -d redis:latest

Test your Redis connection with:

redis-cli ping

You should see “PONG” in response.

Run Sequin

The easiest way to get started with Sequin is with our Docker Compose file. This file starts a Postgres database, Redis instance, and Sequin server.

1

Create directory and start services

  1. Download sequin-docker-compose.zip.
  2. Unzip the file.
  3. Navigate to the unzipped directory and start the services:
cd sequin-docker-compose && docker compose up -d
2

Verify services are running

Check that Sequin is running using docker ps:

docker ps

You should see output like the following:

CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS                    PORTS                              NAMES
bd5c458cabde   sequin/sequin:latest            "/scripts/start_comm…"   11 seconds ago   Up 9 seconds              4000/tcp, 0.0.0.0:7376->7376/tcp   sequin-sequin-1
3bacd89765e7   grafana/grafana                 "/run.sh"                11 seconds ago   Up 11 seconds             0.0.0.0:3000->3000/tcp             sequin-sequin_grafana-1
3ad41319a66c   postgres:16                     "docker-entrypoint.s…"   11 seconds ago   Up 11 seconds (healthy)   0.0.0.0:7377->5432/tcp             sequin-sequin_postgres-1
6139a5fc4e80   redis:7                         "docker-entrypoint.s…"   11 seconds ago   Up 11 seconds             0.0.0.0:7378->6379/tcp             sequin-sequin_redis-1
7e07a5b052de   prom/prometheus                 "/bin/prometheus --c…"   11 seconds ago   Up 11 seconds             0.0.0.0:9090->9090/tcp             sequin-sequin_prometheus-1

Sequin, Postgres, Redis, Prometheus, and Grafana should be up and running (status: Up).

Login

The Docker Compose file automatically configures Sequin with an admin user and a playground database.

Let’s log in to the Sequin web console:

1

Open the web console

After starting the Docker Compose services, open the Sequin web console at http://localhost:7376:

2

Login with default credentials

Use the following default credentials to login:

  • Email:
admin@sequinstream.com
  • Password:
sequinpassword!

View the playground database

To get you started quickly, Sequin’s Docker Compose file creates a logical database called sequin_playground with a sample dataset in the public.products table.

Let’s take a look:

1

Navigate to Databases

In the Sequin web console, click Databases in the sidebar.

2

Select playground database

Click on the pre-configured sequin-playground database:

The database “Health” should be green.

3

View contents of the products table

Let’s get a sense of what’s in the products table. Run the following command:

docker exec -i sequin-sequin_postgres-1 \
  psql -U postgres -d sequin_playground -c \
  "select id, name, price from products;"

This command connects to the running Postgres container and runs a psql command.

You should see a list of the rows in the products table:

  id |         name          | price 
----+-----------------------+-------
  1 | Avocados (3 pack)     |  5.99
  2 | Flank Steak (1 lb)    |  8.99
  3 | Salmon Fillet (12 oz) | 14.99
  4 | Baby Spinach (16 oz)  |  4.99
  5 | Sourdough Bread       |  6.99
  6 | Blueberries (6 oz)    |  3.99
(6 rows)

We’ll make modifications to this table in a bit.

Create a Redis String Sink

With the playground database connected, you can create a sink. This sink will maintain a Redis cache that mirrors your Postgres products table:

1

Navigate to Sinks

Click “Sinks” in the sidebar navigation, then click “Create Sink”.

2

Select sink type

Select “Redis String” as the sink type and click “Continue”.

3

Note "Source" configuration

In the “Source” card, note that the sequin-playground database and products table are pre-selected. Leave these defaults:

4

Setup a backfill

Toggle open the “Initial backfill” card and select “Backfill all rows”:

5

Add a transform function

Open the Transform card, click + Create new transform and use the following Elixir function in a Function transform:

def transform(action, record, changes, metadata) do
  record
end

Name the transform record-only and click Create function.

6

Select the transform

Navigate back to the Sinks tab and select the transform function you just created.

If you don’t see the transform function you just created, click the refresh button.

7

Configure "Redis Configuration"

In the “Redis Configuration” card, enter your Redis connection details.

  • Host: If running locally with Docker, use host.docker.internal
  • Port: The port Redis is listening on (default: 6379)

Leave the rest of the fields with their default values.

8

Test the connection

At the bottom of the form, click the “Test Connection” button. With the above configuration, it should succeed.

Sequin can connect to your Redis instance.

9

Create the sink

As configured, Sequin will:

  1. Backfill all current rows into Redis as key/value pairs
  2. Set up real-time replication so any changes to the products table will be reflected in Redis immediately
  3. Use primary keys from Postgres to form Redis keys (e.g., sequin:products:1, sequin:products:2)

Click “Create Sink” to finish setting up your Redis String sink.

See changes flow to your Redis cache

On the new sink’s overview page, you should see the “Health” status turn green, indicating data is flowing to your Redis cache.

Let’s confirm the cache is working:

1

Messages tab

Click the “Messages” tab. You’ll see a list of the recently delivered messages:

Sequin indicates it backfilled the products table to your Redis cache.

2

View in Redis CLI

Connect to your Redis instance using the Redis CLI:

redis-cli

Then list the products in your Redis cache:

KEYS sequin:products:*

You should see a list of keys corresponding to products from your Postgres table.

Now, let’s look at the actual data for one product:

GET sequin:products:1

You should see a JSON representation of the product data.

Data from Postgres is now cached in Redis as strings.

3

Make some changes

Let’s make some changes to the products table and see them reflected in your Redis cache.

In your terminal, run the following command to insert a new row into the products table:

docker exec -i sequin-sequin_postgres-1 \
  psql -U postgres -d sequin_playground -c \
  "insert into products (name, price) values ('Organic Honey (16 oz)', 12.99);"

In Redis CLI, check if the new product was added to the cache:

KEYS sequin:products:*

You should see a new key for the product you just added. View its contents:

GET sequin:products:[new-id]

Replace [new-id] with the ID of the newly inserted product.

Feel free to try other changes:

Each change to your Postgres database will be automatically reflected in your Redis cache within a few seconds.

Great work!

You’ve successfully:

  • Set up a complete Postgres to Redis cache synchronization pipeline
  • Loaded existing data through a backfill
  • Made changes to the products table
  • Verified Redis cache updates automatically with your database changes

Applications of Redis Strings Sink

Redis Strings are incredibly versatile and can be used for various caching scenarios:

  • Fast lookups: Redis can serve product details much faster than a database query
  • Multi-region caching: Use Sequin to sync records from your primary database to Redis in multiple regions
  • Cache invalidation: Configure your Redis cache with infinite retention and rely on Sequin to SET and DEL keys as records are updated or deleted

Ready to stream

Now you’re ready to connect your own database to Sequin and start streaming changes: