Перейти к основному содержимому

Атомарное увеличение/уменьшение (LCC.kvdb.dict.incr)

Сигнатура​

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

Параметры​

  • name
    Строка, имя словаря (непустое, максимум 256 байт)
  • key
    Строка, имя ключа (корректный UTF-8 и непустой)
  • by
    Целое число, необязательный шаг изменения, по умолчанию 1; может быть отрицательным
  • init
    Целое число, необязательное начальное значение при отсутствии ключа, по умолчанию 0
  • min
    Целое число, необязательная нижняя граница результата; выходящее за неё значение ограничивается
  • max
    Целое число, необязательная верхняя граница результата; выходящее за неё значение ограничивается
  • coerce
    Логическое значение, необязательное; при true нецелое старое значение принудительно сбрасывается в init, по умолчанию false
  • timeout
    Число, необязательный тайм-аут запроса (секунды), по умолчанию 60

Возвращаемое значение​

  • value
    Число, результат приращения; при сбое — nil
  • meta_or_err
    Таблица или строка. При успехе возвращается таблица метаданных:
    • created: логическое значение, создан ли ключ этим вызовом
    • coerced: логическое значение, выполнялось ли принудительное приведение типа
    • clamped: логическое значение, был ли результат ограничен
    • clamp_reason: строка, причина ограничения (min/max)
    • original_value: число, старое значение (если есть)
    • computed_value: число, значение, вычисленное с указанным шагом
    • result_value: число, итоговое записанное значение При сбое возвращается строка с описанием ошибки

Описание​

Потокобезопасная атомарная операция со счётчиком.
С помощью min/max можно ограничить диапазон результата, а coerce сбрасывает недопустимое старое значение в init.
При сбое вызов возвращает nil, 错误信息.

Пример​

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