Перейти к содержанию

riak: Lua клиентский драйвер для протокола riak для nginx-module-lua на основе cosocket API

Установка

Если вы еще не подписались на RPM репозиторий, зарегистрируйтесь. Затем вы можете продолжить с следующими шагами.

CentOS/RHEL 7 или Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-riak

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-riak

Чтобы использовать эту Lua библиотеку с NGINX, убедитесь, что nginx-module-lua установлен.

Этот документ описывает lua-resty-riak v2.0.0, выпущенный 5 декабря 2013 года.


lua-resty-riak - Lua клиентский драйвер для протокола riak для ngx_lua на основе cosocket API.

Изначально основан на библиотеке lua-resty-memcached.

Влияние библиотеки riak-client-ruby.

Описание

Эта Lua библиотека является клиентским драйвером для протокола riak для ngx_lua nginx модуля.

Эта Lua библиотека использует cosocket API ngx_lua, который обеспечивает 100% неблокирующее поведение.

Обратите внимание, что требуется как минимум ngx_lua 0.5.0rc29 или ngx_openresty 1.0.15.7.

Зависит от следующих Lua модулей:

Синопсис

location /t {
    content_by_lua '
        require "luarocks.loader"
        local riak = require "resty.riak"
        local client = riak.new()
        local ok, err = client:connect("127.0.0.1", 8087)
        if not ok then
            ngx.log(ngx.ERR, "connect failed: " .. err)
        end
        local bucket = client:bucket("test")
        local object = bucket:new("1")
        object.value = "test"
        object.content_type = "text/plain"
        local rc, err = object:store()
        ngx.say(rc)
        local object, err = bucket:get("1")
        if not object then
            ngx.say(err)
        else
            ngx.say(object.value)
        end
        client:close()
    ';
}

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

Смотрите сгенерированную документацию для использования и примеров.

Примечание Высокоуровневый API должен считаться стабильным - т.е. он не будет ломаться между минорными версиями. Низкоуровневый или сырой API не следует считать стабильным.

Потенциально Ломающее Изменение в 2.0

2.0.0 теперь использует векторные часы для получения, установки и удаления объектов. Если вы используете бакет, который позволяет несколько значений (соседей), это может сломать ваше приложение.

Ограничения

  • Эта библиотека не может использоваться в контекстах кода, таких как set_by_lua, log_by_lua и header_filter_by_lua, где cosocket API ngx_lua недоступен.
  • Экземпляры объекта resty.riak не могут храниться в переменной Lua на уровне модуля Lua, потому что они будут разделяться всеми параллельными запросами, обрабатываемыми тем же рабочим процессом nginx (см. Обмен Данными внутри Рабочего Процесса Nginx) и приведут к плохим условиям гонки, когда параллельные запросы пытаются использовать одни и те же экземпляры. Вы всегда должны инициализировать эти объекты в локальных переменных функции или в таблице ngx.ctx. Эти места имеют свои собственные копии данных для каждого запроса.

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-riak.