Aller au contenu

counter: Compteur sans verrou pour nginx-module-lua

Installation

Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.

CentOS/RHEL 7 ou 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

Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.

Ce document décrit lua-resty-counter v0.2.1 publié le 09 avril 2020.


Lorsque le nombre de travailleurs augmente, la pénalité d'acquisition d'un verrou devient notable. Cette bibliothèque implémente un compteur sans verrou qui effectue l'opération d'incrémentation dans la VM Lua du travailleur. Chaque travailleur synchronise ensuite son compteur local avec un dictionnaire partagé en temps voulu.

API

counter.new

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

Crée une nouvelle instance de compteur. Prenez le premier argument comme le nom du dictionnaire partagé sous forme de chaîne. Et un deuxième argument optionnel comme intervalle pour synchroniser l'état local avec le dictionnaire partagé en nombre. Si le deuxième argument est omis, le compteur local ne sera pas synchronisé automatiquement, l'utilisateur est responsable d'appeler counter:sync sur chaque travailleur.

counter.sync

syntax: ok = counter:sync()

Synchronise le compteur local du travailleur actuel avec le dictionnaire partagé. Pas nécessaire si un compteur est créé avec sync_interval non défini sur nil.

counter.incr

syntax: counter:incr(key, step?)

Augmente le compteur de la clé k avec un pas de step. Si step est omis, il est par défaut à 1.

counter.reset

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

Réinitialise le compteur dans le dictionnaire partagé avec une diminution de number. Cette fonction est un wrapper de ngx.shared.DICT:incr(key, -number, number), veuillez vous référer à la doc du lua-nginx-module pour les valeurs de retour.

counter.get

syntax: value = counter:get(key)

Obtenez la valeur du compteur à partir du dictionnaire partagé.

counter.get_keys

syntax: keys = counter:get_keys(max_count?)

Obtenez les clés des compteurs dans le dictionnaire partagé. Cette fonction est un wrapper de ngx.shared.DICT:get_keys, veuillez vous référer à la doc du lua-nginx-module pour les valeurs de retour.

Voir aussi

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-counter.