アトミックに加算 / 減算する (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