본문으로 건너뛰기

원자적 증가/감소 (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