Sink data from RisingWave to Redis
This guide describes how to sink data from RisingWave to Redis.
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 (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.
|
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 . |
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, and Pub/Sub messaging.
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. Specify redis_value_type = 'string'
or omit this parameter, as string
is the default.
Assume we create a materialized view, bhv_mv
, from a source.
We can sink data from bhv_mv
to Redis by creating a sink. Here, data_encode
is JSON
.
We can sink data from 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 specify FORMAT UPSERT ENCODE TEMPLATE
, redis_value_type = 'geospatial'
, key_format
, longitude
, latitude
, and member
.
Assume we have a table t1
:
We can sink geospatial data to Redis:
Now insert the geospatial data into the table t1
:
You can retrieve the geospatial information from Redis:
For more information, see Geospatial indexing.
Pub/Sub messaging
This approach allows RisingWave to publish messages to Redis channels. Make sure to specify FORMAT UPSERT ENCODE TEMPLATE
, redis_value_type = 'pubsub'
, and value_format
. At least one of channel
or channel_column
must also be specified.
Assume we have a table t1
:
We can sink data from t1
as messages to a predefined Redis Pub/Sub channel:
Alternatively, you can publish to a dynamic channel using channel_column
: