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.