Ir para o conteúdo principal

Incrementar/decrementar atomicamente (LCC.kvdb.dict.incr)

Declaração​

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

Parâmetros​

  • name
    Tipo string; nome do dicionário (não vazio, no máximo 256 bytes)
  • key
    Tipo string; nome da chave (UTF-8 válido e não vazio)
  • by
    Tipo integer, opcional; passo do incremento/decremento, padrão 1, pode ser negativo
  • init
    Tipo integer, opcional; valor inicial quando a chave não existe, padrão 0
  • min
    Tipo integer, opcional; limite inferior do resultado, com contenção quando excedido
  • max
    Tipo integer, opcional; limite superior do resultado, com contenção quando excedido
  • coerce
    Tipo boolean, opcional; quando true, redefine à força para init se o valor antigo não for inteiro, padrão false
  • timeout
    Tipo number, opcional; tempo limite da solicitação (em segundos), padrão 60

Valor de retorno​

  • value
    Tipo number; resultado depois do incremento, ou nil em caso de falha
  • meta_or_err
    Tipo table ou string. Em caso de sucesso, retorna uma table de metadados:
    • created: tipo boolean; indica se a chave foi criada nesta chamada
    • coerced: tipo boolean; indica se a coerção de tipo foi acionada
    • clamped: tipo boolean; indica se o resultado foi contido
    • clamp_reason: tipo string; motivo da contenção (min/max)
    • original_value: tipo number; valor antigo, se existir
    • computed_value: tipo number; valor calculado de acordo com o passo
    • result_value: tipo number; valor finalmente gravado Em caso de falha, retorna uma string com a descrição do erro

Descrição​

Operação de contador atômica e segura para threads.
Use min/max para limitar o intervalo do resultado e coerce para redefinir valores antigos inválidos para init.
Quando a chamada falha, retorna nil, 错误信息.

Exemplo​

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