メインコンテンツへ移動

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