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 модулей:
- lua-pb - https://github.com/Neopallium/lua-pb
- struct - http://www.inf.puc-rio.br/~roberto/struct/
- lpack - http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lpack
Синопсис
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.