Redis is an open-source, in-memory data structure store, often referred to as a data structure server. RisingWave sinks data to Redis in the form of strings storing key-value pairs in the specified format (Documentation Index
Fetch the complete documentation index at: https://docs.risingwave.com/llms.txt
Use this file to discover all available pages before exploring further.
JSON or TEMPLATE), so a primary key must always be provided.
You can test out this process on your own device by using the redis-sink demo in the integration_test directory of the RisingWave repository.
Prerequisites
Before sinking data from RisingWave to Redis, please ensure the following:- The Redis database you want to sink to is accessible from RisingWave.
- Ensure you have an upstream materialized view or source in RisingWave that you can sink data from.
Syntax
Parameters
| Name | Description |
|---|---|
| redis.url | Required. Choose either the Redis cluster address or a non-cluster Redis address.
rediss:// protocol instead of redis://. |
| primary_key | Required. The primary keys of the sink. If necessary, use , to delimit the primary key columns. |
FORMAT and ENCODE options
These options should be set in
FORMAT data_format ENCODE data_encode (key = 'value'), instead of the WITH clause.| Field | Notes |
|---|---|
| data_format | Data format. Allowed formats:
|
| data_encode | Data encoding. Supported encodings:
|
| force_append_only | If true, forces the sink to be PLAIN (also known as append-only), even if it cannot be. |
| key_format | Specify the format for the key as a string. |
| value_format | Specify the format for the value as a string. |
| key_encode | Optional.
|
| redis_value_type | Optional. Controls how data is written to Redis. For details, see examples below.
|
| channel | Optional. Required if redis_value_type = 'pubsub' and channel_column is not set. The name of the Redis Pub/Sub channel to publish messages to. |
| channel_column | Optional. Required if redis_value_type = 'pubsub' and channel is not set. The values from this column will be used as the names of the Redis Pub/Sub channels to publish messages to. Must be type of VARCHAR. |
| stream | Optional. Required if redis_value_type = 'stream' and stream_column is not set. The name of the Redis Stream to publish messages to. |
| stream_column | Optional. Required if redis_value_type = 'stream' and stream is not set. The values from this column will be used as the names of the Redis Streams to publish messages to. Must be type of VARCHAR. |
| longitude | Optional. Required if redis_value_type = 'geospatial'. Contains the longitude value. Must be of type FLOAT, REAL, or VARCHAR. |
| latitude | Optional. Required if redis_value_type = 'geospatial'. Contains the latitude value. Must be of type FLOAT, REAL, or VARCHAR. |
| member | Optional. Required when redis_value_type = 'geospatial'. Contains the member names for the geospatial set. Must be of type VARCHAR and part of the primary key. |
Example
This section provides examples for sinking data from RisingWave to Redis, covering key-value storage, geospatial data storage, Pub/Sub messaging, and streams.Key-value storage
This approach is suitable when you want to use Redis as a fast data store or cache, storing data as key-value pairs. Specifyredis_value_type = 'string' or omit this parameter, as string is the default.
Assume we create a materialized view, bhv_mv, from a source.
bhv_mv to Redis by creating a sink. Here, data_encode is JSON.
bhv_mv to Redis by creating a sink. Here, data_encode is TEMPLATE, so key_format and value_format must be defined.
Geospatial data storage
This approach allows RisingWave to store geospatial data (longitude, latitude, member) in Redis. Make sure to specifyFORMAT UPSERT ENCODE TEMPLATE, redis_value_type = 'geospatial', key_format, longitude, latitude, and member.
Assume we have a table t1:
t1:
Pub/Sub messaging
This approach allows RisingWave to publish messages to Redis channels. Make sure to specifyFORMAT UPSERT ENCODE TEMPLATE, redis_value_type = 'pubsub', and value_format. Specify either channel or channel_column. These two parameters are mutually exclusive.
Assume we have a table t1:
t1 as messages to a predefined Redis Pub/Sub channel:
channel_column:
Streams
Added in v2.7.0.
FORMAT PLAIN ENCODE TEMPLATE, redis_value_type = 'stream', key_format, and value_format. Specify either stream or stream_column. These two parameters are mutually exclusive.
Assume we have a table t1:
t1 as messages to a predefined Redis Stream:
stream_column: