上記の受け入れられた答えは不必要に複雑です。この状況では、マルチを使用したり、ウォッチしたりする必要はありません。 INCRはすでにアトミックであり、この正確なシナリオ向けに設計されています。 編集:受け入れられた答えを変更してくれたItamar Haber&robe007に感謝します。 :)
簡単にこれを行うことができます:
var name = 'Josh';
client.incr('id', function(err, id) {
client.hmset('user:' + id, 'username', name);
});
上記を実行することにより、INCRは自動的に「id」キーをロックし、それをインクリメントし、ロックを解除して、あなたに返します。したがって、上記のコードを使用して重複するユーザーIDを取得する方法はありません。また、失敗をチェックし、失敗した場合はクエリを再実行する必要があるWATCH / GETとは異なり、実際には失敗しないという利点もあります。