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.