Home

Awesome

Name

lua-resty-counter - Lock-free counter for OpenResty.

Build Status luarocks

Table of Contents

Description

When number of workers increase, the penalty of acquiring a lock becomes noticable. This library implements a lock-free counter that does incrementing operation in worker's Lua VM. Each worker then sync its local counter to a shared dict timely.

Back to TOC

Status

Production

API

counter.new

syntax: c, err = counter.new(shdict_name, sync_interval?)

Create a new counter instance. Take first argument as the shared dict name in string. And an optional second argument as interval to sync local state to shared dict in number. If second argument is omitted, local counter will not be synced automatically, user are responsible to call counter:sync on each worker.

Back to TOC

counter.sync

syntax: ok = counter:sync()

Sync current worker's local counter to shared dict. Not needed if a counter is created with sync_interval not set to nil.

Back to TOC

counter.incr

syntax: counter:incr(key, step?)

Increase counter of key k with a step of step. If step is omitted, it's default to 1.

Back to TOC

counter.reset

syntax: newval, err, forcible? = counter:reset(key, number)

Reset the counter in shdict with a decrease of number. This function is a wrapper of ngx.shared.DICT:incr(key, -number, number), please refer to lua-nginx-module doc for return values.

Back to TOC

counter.get

syntax: value = counter:get(key)

Get the value of counter from shared dict.

Back to TOC

counter.get_keys

syntax: keys = counter:get_keys(max_count?)

Get the keys of counters in shared dict. This function is a wrapper of ngx.shared.DICT:get_keys, please refer to lua-nginx-module doc for return values.

Back to TOC

TODO

Back to TOC

Copyright and License

This module is licensed under the Apache 2.0 license.

Copyright (C) 2019, Kong Inc.

All rights reserved.

Back to TOC

See Also

Back to TOC