Keyval#

O módulo permite o uso de variáveis com valores de pares "chave-valor", que são armazenados em memória compartilhada ou em um armazenamento Redis.

Instalação#

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

  • Angie: angie-module-keyval

  • Angie PRO: angie-pro-module-keyval

Carregando o Módulo#

Para trabalhar com o módulo, ele deve ser carregado no contexto de main{}:

load_module modules/ngx_http_keyval_module.so;

Exemplo de Configuração#

keyval_zone zone=one:32k;
keyval $arg_key $value zone=one;

server {
    listen 80;
    server_name localhost;

    location /get {
        return 200 "chave '$arg_key' tem valor = '$value'\\n";
    }

    location /set {
        set $value $arg_value;
        return 200 "chave '$arg_key' adicionada com valor '$arg_value'\\n";
    }
}

A adição e modificação de entradas na zona de memória compartilhada 'one' é feita atribuindo um valor à variável $value. O valor da chave é armazenado na variável $arg_key. Nesta configuração, esta é a diretiva set:

set $value $arg_value;

Demonstração#

Vamos definir alguns valores usando requisições:

$ curl "localhost/set/?key=one&value=TextForKeyOne"

  chave 'one' adicionada com valor 'TextForKeyOne'
$ curl "localhost/set/?key=two&value=TextForKeyTwo"

  chave 'two' adicionada com valor 'TextForKeyTwo'

Vamos verificar:

$ curl "localhost/get/?key=one"

  chave 'one' tem valor = 'TextForKeyOne'
$ curl "localhost/get/?key=two"

  chave 'two' tem valor = 'TextForKeyTwo'

Usando Redis#

Vamos modificar a configuração para armazenar pares "chave-valor" em um armazenamento Redis:

keyval_zone_redis zone=oneredis;
keyval $arg_key $value zone=oneredis;

server {
    listen 80;
    server_name localhost;

    location /get {
        return 200 "chave '$arg_key' tem valor = '$value'\\n";
    }

    location /set {
        set $value $arg_value;
        return 200 "chave '$arg_key' adicionada com valor '$arg_value'\\n";
    }
}

Vamos adicionar um par "chave-valor" ao armazenamento Redis via requisição:

$ curl "localhost/set/?key=one&value=TextForKeyOne"

  chave 'one' adicionada com valor 'TextForKeyOne'

O mesmo pode ser feito usando o próprio Redis:

$ redis-cli

  127.0.0.1:6379> set oneredis:two 'text for key two'

  OK

  127.0.0.1:6379>

Vamos verificar:

$ redis-cli --scan

  "oneredis:one"
  "oneredis:two"
$ curl "localhost/get/?key=one"

  chave 'one' tem valor = 'TextForKeyOne'
$ curl "localhost/get/?key=two"

  chave 'two' tem valor = 'text for key two'

Informações Adicionais#

Uma descrição completa das diretivas e o código-fonte estão disponíveis em: kjdev/nginx-keyval.