Craft Counter を利用する
Craft Counter はCraft Functions内で利用できる高速なカウンターです。以下に示すユースケースのように秒間数十回以上のカウントアップ・ダウンリクエストが発生する場合に活用できます。
- 大規模なアンケート結果のリアルタイム集計
- 大規模なクーポン施策における払い出し枚数計測
Counter の構造
Craft Counter は key
とそれに紐づく value
からなる Key-Value Store です。
key
- Counter のユニークなキーです
- KARTEプロジェクト単位でユニークなキーです
MODULES.counter
上は string 型の値として扱います- マルチバイト文字は利用できません
- Counter のユニークなキーです
value
- キーに紐づくカウンターの値です
MODULES.counter
上は number 型の整数値として扱います
各 key
の値には存在期間(TTL)が設定されます。TTLを過ぎたレコードは自動的に消去されます。
- デフォルトのTTLは86400秒(1日)です
- TTLの最大値は2592000秒(30日)です
- 値の設定が可能なメソッドでは引数に
secondsToExpire
を渡すことでTTLの設定ができます。
サンプルコード
Craft Counter への値の書き込み、読み取り方法を示すためのサンプルコードです。
メソッド
counter
モジュールで利用できるメソッドについて説明します。
set
Counterの特定の key
に value
で指定した数値を書き込みます。
secondsToExpire
でTTLが設定できます。省略した場合のデフォルト値は86400
(1日) です。設定できる最大値は2592000
(30日) です。
get
Counterの key
に紐づく数値を取得します。引数 keys
には読み込み対象の key
を配列として渡します。各 key
に紐づく数値からなる配列を返却します。Counterに存在しない key
を指定した場合、値は0として扱われます。
increment
Counterの key
に紐づく数値に changeAmount
で指定した値を加え、加えた後の値を返却します。この処理はアトミックに行われるため、同時に呼び出された場合も値は重複しません。
changeAmount
を省略した場合は1が加えられます。secondsToExpire
でTTLを再設定できます。省略した場合はTTLを更新しません。- 存在しない
key
を指定することもできます。その場合はkey
に紐づく値を0
とみなしてインクリメントし、1
を返却します。- 存在しない
key
を指定し、なおかつsecondsToExpire
を省略した場合、そのkey
のTTLは86400
(1日) となります。
- 存在しない
decrement
Counterの key
に紐づく数値から changeAmount
で指定した値を引き、引いた後の値を返却します。この処理はアトミックに行われるため、同時呼び出しの場合も値は重複しません。
changeAmount
を省略した場合は1が引かれます。secondsToExpire
でTTLを再設定できます。省略した場合はTTLを更新しません。- 存在しない
key
を指定することもできます。その場合はkey
に紐づく値を0
とみなしてデクリメントし、-1
を返却します。- 存在しない
key
を指定し、なおかつsecondsToExpire
を省略した場合、そのkey
のTTLは86400
(1日) となります。
- 存在しない
APIリファレンス
FAQ
Counterのレコードはどの単位で共有されますか?
- プロジェクト単位で1つのデータベースが共有されます。
- 複数のFunctionで同じデータを参照することも可能です。
- Function単位でnamespaceを厳密に管理してください。
すでに存在する key に set した場合はどうなりますか?
- 既存のカウンターが上書きされます
- TTLも上書きされます。(
secondsToExpire
もしくはデフォルトの 86400 秒)
秒間数十回を超える高いパフォーマンスが求められるケースに対応できますか?
- 要件によっては対応可能です
- サポートや営業担当までご相談ください