Redis2#

O módulo redis2 fornece a capacidade de interagir com um servidor Redis 2.x. Ele implementa o protocolo Redis 2.0 unificado completo, incluindo suporte para pipelining Redis.

Instalação#

Para instalar o módulo, use um dos seguintes pacotes:

  • Angie: angie-module-redis2

  • Angie PRO: angie-pro-module-redis2

Carregando o Módulo#

Para trabalhar com o módulo, ele deve ser carregado no contexto main{}. O exemplo abaixo também usa diretivas do módulo 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;

Exemplo de Configuração#

upstream redis_upstream {
    server 127.0.0.1:6379;
}

server {
    listen       80;
    server_name  localhost;

    # Definir valor da chave
    location /foo {
        set $value 'first';
        redis2_query set one $value;
        redis2_pass redis_upstream;
    }

    # Obter valor por chave
    location /bar {
        redis2_query get one;
        redis2_pass redis_upstream;
    }

    # Definir valor da chave a partir de parâmetros de consulta
    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;
    }

    # Obter valor por chave a partir de parâmetros de consulta
    location /get {
        set_unescape_uri $key $arg_key;
        redis2_query get $key;
        redis2_pass 127.0.0.1:6379;
    }

    # Executar múltiplos comandos em pipeline
    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;
    }

    # Executar comando arbitrário passado em parâmetro de consulta
    location /cmd {
        set_unescape_uri $cmd $arg_command;
        redis2_raw_query "$cmd\r\n";
        redis2_pass 127.0.0.1:6379;
    }
}

Aviso

Importante! Diferentemente da diretiva proxy_pass no Angie, o uso de variáveis no parâmetro da diretiva redis2_pass não é permitido.

Demonstração da Execução de Requisições#

Exemplos de trabalho com o módulo.

$ curl localhost/foo
+OK

$ curl localhost/bar
$5
first

Aqui $5 é o comprimento do valor (5 bytes), e first é o valor em si.

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

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

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

O valor $-1 indica que a chave three não existe.

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

Executando comandos Redis arbitrários:

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

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

Informações Adicionais#

Documentação detalhada e código fonte estão disponíveis em: openresty/redis2-nginx-module.