title: redis keywords:
The Redis protocol support allows APISIX to proxy Redis commands, and provide various features according to the content of the commands, including:
:::note
This feature requires APISIX to be run on APISIX-Runtime.
It also requires the data sent from clients are well-formed and sane. Therefore, it should only be used in deployments where both the downstream and upstream are trusted.
:::
Like other protocols based on the xRPC framework, the Redis implementation here also has the concept of request.
Each Redis command is considered a request. However, the message subscribed from the server won't be considered a request.
For example, when a Redis client subscribes to channel foo and receives the message bar, then it unsubscribes the foo channel, there are two requests: subscribe foo and unsubscribe foo.
| Name | Type | Required | Default | Valid values | Description |
|---|---|---|---|---|---|
| faults | array[object] | False | Fault injections which can be applied based on the commands and keys |
Fields under an entry of faults:
| Name | Type | Required | Default | Valid values | Description |
|---|---|---|---|---|---|
| commands | array[string] | True | [“get”, “mget”] | Commands fault is restricted to | |
| key | string | False | “blahblah” | Key fault is restricted to | |
| delay | number | True | 0.1 | Duration of the delay in seconds |
apisix_redis_commands_total: Total number of requests for a specific Redis command.
| Labels | Description |
|---|---|
| route | matched stream route ID |
| command | the Redis command |
apisix_redis_commands_latency_seconds: Latency of requests for a specific Redis command.
| Labels | Description |
|---|---|
| route | matched stream route ID |
| command | the Redis command |
:::note You can fetch the admin_key from config.yaml and save to an environment variable with the following command:
admin_key=$(yq '.deployment.admin.admin_key[0].key' conf/config.yaml | sed 's/"//g')
:::
Assumed the APISIX is proxying TCP on port 9101, and the Redis is listening on port 6379.
Let's create a Stream Route:
curl http://127.0.0.1:9180/apisix/admin/stream_routes/1 -H "X-API-KEY: $admin_key" -X PUT -d ' { "upstream": { "type": "none", "nodes": { "127.0.0.1:6379": 1 } }, "protocol": { "name": "redis", "conf": { "faults": [{ "commands": ["get", "ping"], "delay": 5 }] } } } '
Once you have configured the stream route, as shown above, you can make a request to it:
redis-cli -p 9101
127.0.0.1:9101> ping PONG (5.00s)
You can notice that there is a 5 seconds delay for the ping command.