Passer au contenu principal

Incrémentation/décrémentation atomique (LCC.kvdb.dict.incr)

Déclaration​

value, meta_or_err = LCC.kvdb.dict.incr(name, key, by?, init?, min?, max?, coerce?, timeout?)

Paramètres​

  • name
    Type chaîne, nom du dictionnaire (non vide, 256 octets au maximum)
  • key
    Type chaîne, nom de la clé (UTF-8 valide et non vide)
  • by
    Type entier, facultatif ; pas d'incrémentation ou de décrémentation, 1 par défaut, peut être négatif
  • init
    Type entier, facultatif ; valeur initiale si la clé n'existe pas, 0 par défaut
  • min
    Type entier, facultatif ; borne inférieure du résultat, qui est ramené à cette valeur s'il la dépasse
  • max
    Type entier, facultatif ; borne supérieure du résultat, qui est ramené à cette valeur s'il la dépasse
  • coerce
    Type booléen, facultatif ; lorsque true, une ancienne valeur non entière est réinitialisée de force à init, false par défaut
  • timeout
    Type numérique, facultatif ; délai d'attente de la demande en secondes, 60 par défaut

Valeurs de retour​

  • value
    Type numérique, résultat de l'incrémentation ; nil en cas d'échec
  • meta_or_err
    Type table ou chaîne. En cas de succès, renvoie une table de métadonnées :
    • created : booléen, indique si la clé a été créée par cet appel
    • coerced : booléen, indique si la conversion forcée du type a été déclenchée
    • clamped : booléen, indique si le résultat a été borné
    • clamp_reason : chaîne, raison de la borne (min/max)
    • original_value : numérique, ancienne valeur (si elle existait)
    • computed_value : numérique, valeur calculée selon le pas
    • result_value : numérique, valeur finalement écrite En cas d'échec, renvoie une chaîne décrivant l'erreur

Description​

Opération de compteur atomique et sûre vis-à-vis des threads.
min et max limitent l'intervalle du résultat ; coerce réinitialise une ancienne valeur invalide à init.
En cas d'échec, renvoie nil, 错误信息.

Exemple​

local value, meta = LCC.kvdb.dict.incr("计数器", "重试次数", 1, 0, 0, 5, true)
if value then
LCC.log(1, "当前重试次数", value, meta.clamped and "已达上限" or "")
end