如何在密钥上调用.incr,并且只有在结果数字为<不必事先打电话给.get,而不是一定数量?
之前调用.get的原因是有问题的,因为如果我有多个线程。可能有100个线程执行了下面的第一行,它们都获得了值#34; 0"结果,所有增量。竞争条件,如果你愿意的话。
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
答案 0 :(得分:1)
您可以使用WATCH
/ MULTI
/ EXEC
语义进行乐观锁定,也可以编写Lua(如未测试):
local r=redis.call('GET', KEYS[1])
if r < ARGV[1] then
redis.call('INCR', KEYS[1])
end