<!-- review: finished -->

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

# 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.

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

## Instalación

Para [instalar](https://es.angie.software//angie/docs/installation/index.md#install-packages) el módulo, use uno de los siguientes paquetes:

- Angie: `angie-module-keyval`
- Angie PRO: `angie-pro-module-keyval`

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

## Carga del Módulo

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

```nginx
load_module modules/ngx_http_keyval_module.so;
```

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

## Ejemplo de Configuración

```nginx
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`:

```nginx
set $value $arg_value;
```

<a id="demonstration-1"></a>

## Demostración

Definamos algunos valores usando solicitudes:

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

  'one' key added with 'TextForKeyOne' value
```

```console
$ curl "localhost/set/?key=two&value=TextForKeyTwo"

  'two' key added with 'TextForKeyTwo' value
```

Comprobemos:

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

  key 'one' has value = 'TextForKeyOne'
```

```console
$ curl "localhost/get/?key=two"

  key 'two' has value = 'TextForKeyTwo'
```

<a id="using-redis"></a>

## Usando Redis

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

```nginx
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:

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

  'one' key added with 'TextForKeyOne' value
```

Lo mismo se puede hacer usando Redis directamente:

```console
$ redis-cli

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

  OK

  127.0.0.1:6379>
```

Comprobemos:

```console
$ redis-cli --scan

  "oneredis:one"
  "oneredis:two"
```

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

  key 'one' has value = 'TextForKeyOne'
```

```console
$ curl "localhost/get/?key=two"

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

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

## Información Adicional

Una descripción completa de las directivas y el código fuente está disponible en:
[https://github.com/kjdev/nginx-keyval](https://github.com/kjdev/nginx-keyval).
