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;
    }
}

Предупреждение

Важно! В отличие от директивы proxy_pass в Angie, в директиве 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.