Keyval#

El módulo permite el uso de variables con valores de pares "clave-valor", que se almacenan en memoria compartida o en un almacén Redis.

Instalación#

Para instalar el módulo, use uno de los siguientes paquetes:

  • Angie: angie-module-keyval

  • Angie PRO: angie-pro-module-keyval

Carga del Módulo#

Para trabajar con el módulo, debe cargarse en el contexto de main{}:

load_module modules/ngx_http_keyval_module.so;

Ejemplo de Configuración#

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

server {
    listen 80;
    server_name localhost;

    location /get {
        return 200 "key '$arg_key' has value = '$value'\\n";
    }

    location /set {
        set $value $arg_value;
        return 200 "'$arg_key' key added with '$arg_value' value\\n";
    }
}

Agregar y modificar entradas en la zona de memoria compartida one se hace asignando un valor a la variable $value. El valor de la clave se almacena en la variable $arg_key. En esta configuración, esto se hace con la directiva set:

set $value $arg_value;

Demostración#

Definamos algunos valores usando solicitudes:

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

  'one' key added with 'TextForKeyOne' value
$ curl "localhost/set/?key=two&value=TextForKeyTwo"

  'two' key added with 'TextForKeyTwo' value

Comprobemos:

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

  key 'one' has value = 'TextForKeyOne'
$ curl "localhost/get/?key=two"

  key 'two' has value = 'TextForKeyTwo'

Usando Redis#

Modifiquemos la configuración para almacenar pares "clave-valor" en un almacén Redis:

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

server {
    listen 80;
    server_name localhost;

    location /get {
        return 200 "key '$arg_key' has value = '$value'\\n";
    }

    location /set {
        set $value $arg_value;
        return 200 "'$arg_key' key added with '$arg_value' value\\n";
    }
}

Agreguemos un par "clave-valor" al almacén Redis a través de una solicitud:

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

  'one' key added with 'TextForKeyOne' value

Lo mismo se puede hacer usando Redis directamente:

$ redis-cli

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

  OK

  127.0.0.1:6379>

Comprobemos:

$ redis-cli --scan

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

  key 'one' has value = 'TextForKeyOne'
$ curl "localhost/get/?key=two"

  key 'two' has value = 'text for key two'

Información Adicional#

Una descripción completa de las directivas y el código fuente está disponible en: kjdev/nginx-keyval.