跳转至

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 仓库 中找到有关此模块的其他配置提示和文档。