-1

私は MSETNX ( http://redis.io/commands/msetnx ) をロック システムとして使用しています。これにより、ロックがまだ存在しない場合にのみ、すべてのキーがロックされます。

ロックを保持しているマシンが停止した場合、そのロックはロックされたままになります - これは問題です。

私の理想的な答えは、すべてのキーがデフォルトで 15 秒で期限切れになることです。そのため、マシンが停止した場合でも、保持されているロックは短時間で自動リセットされます。このようにして、設定したすべてのキーで expire を呼び出す必要はありません。

これは何らかの方法で可能ですか?

4

2 に答える 2

3

高可用性で信頼性の高いロックを構築するには、次のドキュメントを確認してください: http://redis.io/topics/distlock

アルゴリズムはまだベータ版ですが、いくつかのセッションでストレス テストが行​​われており、単一インスタンスのアプローチよりもはるかに信頼性が高くなる可能性があります。

いくつかの言語の参照実装があります (ドキュメントにリンクされています)。

于 2014-07-18T08:32:50.810 に答える
2

Redis には、MSETNX を実行し、すべてのキーをアトミックに期限切れにする組み込みの方法がありません。また、キーのデフォルトの有効期限チューブを設定することもできません。

1. 複数の「SET key value EX 15 NX」をラップする WATCH/MULTI/EXEC ブロックを使用する、または 2. Lua サーバー側スクリプトを使用してこれを行う。

于 2014-07-16T17:03:38.003 に答える