Keyval#

Модуль позволяет использовать переменные со значениями из пар "ключ-значение", которые содержатся в зоне разделяемой памяти, либо в хранилище Redis.

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

Для работы с модулем необходимо загрузить его в контексте main{}:

load_module modules/ngx_http_keyval_module.so;

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

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";
    }
}

Добавление и изменение записи в зоне разделяемой памяти 'one' производится при присвоении значения переменной $value. При этом значение ключа содержится в переменной $arg_key. В данной конфигурации это директива set:

set $value $arg_value;

Демонстрация работы#

Определим несколько значений запросами:

$ 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

Проверяем:

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

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

  key 'two' has value = 'TextForKeyTwo'

Использование Redis#

Модифицируем конфигурацию для хранения пар "ключ-значение" в хранилище 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";
    }
}

Добавим пару "ключ-значение" в хранилище Redis посредством запроса:

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

  'one' key added with 'TextForKeyOne' value

То же самое средствами самого Redis:

$ redis-cli

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

  OK

  127.0.0.1:6379>

Проверяем:

$ 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'

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

Полное описание директив и исходный код доступны по ссылке: kjdev/nginx-keyval.