<!-- review: finished -->

<a id="external-redis2"></a>

# Redis2

Модуль `redis2` предоставляет возможность взаимодействия с сервером Redis
2.x. Он реализует полный унифицированный протокол Redis 2.0, включая поддержку
конвейерной обработки Redis.

<a id="installation-23"></a>

## Установка

Для [установки](https://angie.software//angie/docs/installation/index.md#install-packages) модуля используйте один из следующих пакетов:

- Angie: `angie-module-redis2`;
- Angie PRO: `angie-pro-module-redis2`.

<a id="loading-the-module-23"></a>

## Загрузка модуля

Для работы с модулем необходимо загрузить его в контексте `main{}`.
В примере ниже также используются директивы модуля [set-misc](https://angie.software//angie/docs/installation/external-modules/set-misc.md#external-set-misc):

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

<a id="configuration-example-97"></a>

## Пример конфигурации

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

#### WARNING
Важно! В отличие от директивы `proxy_pass` в Angie, в директиве `redis2_pass` использование переменных в параметре недопустимо.

<a id="request-execution-demonstration"></a>

## Демонстрация выполнения запросов

Примеры работы с модулем.

```console
$ curl localhost/foo
+OK

$ curl localhost/bar
$5
first
```

Здесь `$5` — длина значения (5 байт), а `first` — само значение.

```console
$ 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` отсутствует.

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

Выполнение произвольных команд Redis:

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

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

<a id="additional-information-24"></a>

## Дополнительная информация

Подробная документация и исходный код доступны по ссылке:
[https://github.com/openresty/redis2-nginx-module](https://github.com/openresty/redis2-nginx-module).
