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