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
要在 NGINX 中使用此 Lua 库,请确保已安装 nginx-module-lua。
本文档描述了 lua-resty-counter v0.2.1,发布于 2020 年 4 月 09 日。
当工作进程数量增加时,获取锁的代价变得明显。该库实现了一个无锁计数器,在工作进程的 Lua 虚拟机中执行递增操作。每个工作进程随后及时将其本地计数器同步到共享字典中。
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?)
以 step 的步长增加键 k 的计数器。如果省略 step,默认值为 1。
counter.reset
语法: newval, err, forcible? = counter:reset(key, number)
在共享字典中重置计数器,减少 number。此函数是 ngx.shared.DICT:incr(key, -number, number) 的封装,请参阅 lua-nginx-module doc 以获取返回值。
counter.get
语法: value = counter:get(key)
从共享字典中获取计数器的值。
counter.get_keys
语法: keys = counter:get_keys(max_count?)
获取共享字典中计数器的键。此函数是 ngx.shared.DICT:get_keys 的封装,请参阅 lua-nginx-module doc 以获取返回值。
另见
GitHub
您可以在 nginx-module-counter 的 GitHub 仓库 中找到有关此模块的其他配置提示和文档。