0
.incrをキーで呼び出す方法と、結果の数値が特定の数値より<の場合にのみインクリメントさせる方法は、あらかじめ.getを呼び出す必要はありませんか?<特定の数字の場合のみ、赤字増分?
私が複数のスレッドを持っている場合、.getを事前に呼び出すのは問題があります。下の最初の行を実行したスレッドが100個ある可能性があります。これらのスレッドはすべて値「0」を取得し、結果としてすべての増分を取得します。競争条件、もしあれば。
あなたは楽観的ロックにWATCH
/
MULTI
/
EXEC
セマンティクスを使用するか、または、そのような本1(テストしていない)としてのLuaを構成するか
currentVal = $redis.get('key') #all threads could be done executing this but not yet the below if condition.
if(currentVal < 3)
$redis.incr('key') #1
end
私は前にこれを行うにしようとしたと可能性が高いと思われる唯一の方法は、Luaスクリプトでした。あなたはINCRBYTOMAXのようなコマンドを請うことができます。 – tadman
currentValがハードコードされている場合は、 'incr'と' decr'の後にチェックを行うことができませんでしたか? –