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: 罗泽轩 <[email protected]>
AuthorDate: Fri May 13 22:50:07 2022 +0800

    docs(redis): add xRPC doc (#7038)
    
    Co-authored-by: homeward <[email protected]>
---
 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.

Reply via email to