You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by sp...@apache.org on 2022/05/13 14:50:17 UTC

[apisix] branch master updated: docs(redis): add xRPC doc (#7038)

This is an automated email from the ASF dual-hosted git repository.

spacewander pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new d8e47569c docs(redis): add xRPC doc (#7038)
d8e47569c is described below

commit d8e47569c07b6c82610c26d7afaed30d4feec0e5
Author: 罗泽轩 <sp...@gmail.com>
AuthorDate: Fri May 13 22:50:07 2022 +0800

    docs(redis): add xRPC doc (#7038)
    
    Co-authored-by: homeward <97...@users.noreply.github.com>
---
 docs/en/latest/config.json   |   1 +
 docs/en/latest/xrpc/redis.md | 106 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 107 insertions(+)

diff --git a/docs/en/latest/config.json b/docs/en/latest/config.json
index 60b02af34..d706ac028 100644
--- a/docs/en/latest/config.json
+++ b/docs/en/latest/config.json
@@ -223,6 +223,7 @@
           "type": "category",
           "label": "xRPC",
           "items": [
+            "xrpc/redis",
             "xrpc"
           ]
         },
diff --git a/docs/en/latest/xrpc/redis.md b/docs/en/latest/xrpc/redis.md
new file mode 100644
index 000000000..da03ffc5f
--- /dev/null
+++ b/docs/en/latest/xrpc/redis.md
@@ -0,0 +1,106 @@
+---
+title: redis
+keywords:
+  - APISIX
+  - xRPC
+  - redis
+description: This document contains information about the Apache APISIX xRPC implementation for Redis.
+---
+
+<!--
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+-->
+
+## Description
+
+The Redis protocol support allows APISIX to proxy Redis commands, and provide various features according to the content of the commands, including:
+
+* [Redis protocol](https://redis.io/docs/reference/protocol-spec/) codec
+* Fault injection according to the commands and key
+
+:::note
+
+This feature requires APISIX to be run on [APISIX-Base](../how-to-build.md#step-6-build-openresty-for-apache-apisix).
+
+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.
+
+:::
+
+## Granularity of the request
+
+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`.
+
+## Attributes
+
+| 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 |
+
+## Example usage
+
+Assumed the APISIX is proxying TCP on port `9101`, and the Redis is listening on port `6379`.
+
+Let's create a Stream Route:
+
+```shell
+curl http://127.0.0.1:9080/apisix/admin/stream_routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -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:
+
+```shell
+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.