Атомарное увеличение/уменьшение (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