Redis2#

redis2 模块提供与 Redis 服务器 2.x 交互的能力。它实现了完整的统一 Redis 2.0 协议,包括对 Redis 管道的支持。

加载模块#

要使用该模块,必须在 main{} 的上下文中加载它。下面的示例还使用了 set-misc 模块中的指令:

load_module modules/ndk_http_module.so;
load_module modules/ngx_http_set_misc_module.so;
load_module modules/ngx_http_redis2_module.so;

配置示例#

upstream redis_upstream {
    server 127.0.0.1:6379;
}

server {
    listen       80;
    server_name  localhost;

    # 设置键值
    location /foo {
        set $value 'first';
        redis2_query set one $value;
        redis2_pass redis_upstream;
    }

    # 通过键获取值
    location /bar {
        redis2_query get one;
        redis2_pass redis_upstream;
    }

    # 从查询参数设置键值
    location /set {
        set_unescape_uri $key $arg_key;
        set_unescape_uri $val $arg_val;
        redis2_query set $key $val;
        redis2_pass 127.0.0.1:6379;
    }

    # 从查询参数通过键获取值
    location /get {
        set_unescape_uri $key $arg_key;
        redis2_query get $key;
        redis2_pass 127.0.0.1:6379;
    }

    # 执行多个管道命令
    location /pipeline {
        set $value 'first';
        redis2_query set one $value;
        redis2_query get one;
        redis2_query set one 'first first';
        redis2_query get one;
        redis2_pass 127.0.0.1:6379;
    }

    # 执行通过查询参数传递的任意命令
    location /cmd {
        set_unescape_uri $cmd $arg_command;
        redis2_raw_query "$cmd\r\n";
        redis2_pass 127.0.0.1:6379;
    }
}

警告

重要!与 Angie 中的 proxy_pass 指令不同,在 redis2_pass 指令的参数中使用变量是不允许的。

演示请求执行#

使用该模块的示例。

$ curl localhost/foo
+OK

$ curl localhost/bar
$5
first

这里 $5 是值的长度(5 字节),而 first 是值本身。

$ curl 'localhost/set/?key=two&val=second%20value'
+OK

$ curl 'localhost/get/?key=two'
$12
second value

$ curl 'localhost/get/?key=three'
$-1

$-1 表示键 three 不存在。

$ curl localhost/pipeline
+OK
$5
first
+OK
$11
first first

执行任意 Redis 命令:

$ curl 'localhost/cmd/?command=set%20three%20"third%20value"'
+OK

$ curl 'localhost/cmd/?command=get%20three'
$11
third value

附加信息#

详细文档和源代码可在以下网址获取: openresty/redis2-nginx-module.