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

counter: Безблокировочный счетчик для nginx-module-lua

Установка

Если вы еще не настроили подписку на 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-counter

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

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

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

Этот документ описывает lua-resty-counter v0.2.1, выпущенную 9 апреля 2020 года.


Когда количество рабочих процессов увеличивается, штраф за получение блокировки становится заметным. Эта библиотека реализует безблокировочный счетчик, который выполняет операцию инкрементации в Lua VM рабочего процесса. Каждый рабочий процесс затем синхронизирует свой локальный счетчик с общим словарем своевременно.

API

counter.new

синтаксис: c, err = counter.new(shdict_name, sync_interval?)

Создает новый экземпляр счетчика. Первый аргумент — это имя общего словаря в строковом формате. Второй аргумент (необязательный) — это интервал для синхронизации локального состояния с общим словарем в числовом формате. Если второй аргумент опущен, локальный счетчик не будет синхронизирован автоматически, пользователь несет ответственность за вызов counter:sync на каждом рабочем процессе.

counter.sync

синтаксис: ok = counter:sync()

Синхронизирует локальный счетчик текущего рабочего процесса с общим словарем. Не требуется, если счетчик создан с sync_interval, не установленным в nil.

counter.incr

синтаксис: counter:incr(key, step?)

Увеличивает счетчик ключа k на величину step. Если step опущен, по умолчанию используется 1.

counter.reset

синтаксис: newval, err, forcible? = counter:reset(key, number)

Сбрасывает счетчик в shdict с уменьшением на number. Эта функция является оберткой для ngx.shared.DICT:incr(key, -number, number), пожалуйста, обратитесь к документации lua-nginx-module для значений возврата.

counter.get

синтаксис: value = counter:get(key)

Получает значение счетчика из общего словаря.

counter.get_keys

синтаксис: keys = counter:get_keys(max_count?)

Получает ключи счетчиков в общем словаре. Эта функция является оберткой для ngx.shared.DICT:get_keys, пожалуйста, обратитесь к документации lua-nginx-module для значений возврата.

См. также

GitHub

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