スケジュールジョブ
同じcronがすべてのインスタンスで動き、ロックによってそのうちの1つだけが作業を行います。
自動で期限切れになり、所有者が安全に解放できるロックで、ジョブを一度に1つのワーカーだけが実行するようにします。
NXは誰も保持していない場合にだけ取得します。PX 30000により、Aが停止すると30秒で期限切れになります。
実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。
複数のマシンで動くcronジョブ、決済の確定、キャッシュの再構築は、同時に二重に実行されてはなりません。有効期限のないロックは、所有者がクラッシュすると永遠に保持されたままになります。また単純なDELでロックを解放すると、自分のロックが期限切れになった後に他人のロックを削除してしまうおそれがあります。
NXとPXを付けたSETは、誰も保持していない場合にだけロックを取得し、有効期限を付けるため、クラッシュした所有者が永遠に保持し続けることはありません。各所有者はランダムなトークンを値として保存します。IFEQを付けたDELEXは、ロックがまだ自分のトークンを保持している場合にだけ削除します。これは以前ならLuaスクリプトが必要だった安全な解放です。
NXは誰も保持していない場合にだけ取得します。PX 30000により、Aが停止すると30秒で期限切れになります。
SET lock:billing-run tok-a81f NX PX 30000ロックは保持されているため、Bはnilを受け取り、今回の実行をスキップします。
SET lock:billing-run tok-b22c NX PX 30000請求ジョブを実行するのは1つのワーカーだけです。
PTTL lock:billing-runDELEXは、値がまだAのトークンである場合にだけキーを削除します。
DELEX lock:billing-run IFEQ tok-a81fAが遅すぎて、Bがロックを保持していた場合でも、Aの解放はBのロックに手を触れません。
DELEX lock:billing-run IFEQ tok-stale同じcronがすべてのインスタンスで動き、ロックによってそのうちの1つだけが作業を行います。
1つの注文に対する確定と返金の操作は直列化されるため、重なることはありません。
高コストなキャッシュエントリーを再構築するのは1つのリクエストだけで、他は待つか古い値を返します。
SET NX PXは、空いている場合にだけタイムアウト付きでロックを取得します。
SETNXPXDELEX IFEQは、値が自分のトークンと一致する場合にだけ削除します。
DELEX残り時間を確認し、長いジョブでは延長します。
PTTLPEXPIRE大きな値では、DELEX IFDEQが値全体の代わりにダイジェストを比較します。
DIGESTIFDEQ自分のロックが期限切れになって別のワーカーが取得していた場合、単純なDELはそのワーカーのロックを削除してしまいます。DELEX IFEQは、ロックがまだ自分のトークンを保持している間だけ削除します。
ジョブに通常かかる時間より長くします。長いジョブでは、ロックを保持している間に定期的に有効期限を延長してください。
いいえ。DELEXが比較と削除を1つのコマンドで行います。
HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。