Как я могу назвать .incr на ключе и увеличивать его только ТОЛЬКО, если итоговое число <, чем определенное число, без необходимости называть .get заранее?Redis увеличивает только если <определенное число?
Причина, почему вызов .get заранее проблематичен, потому что, если у меня есть несколько потоков. Там может быть 100 потоков, которые выполнили первую строку ниже, все они получают значение «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
Я пытался сделать это раньше, и единственным способом, который казался возможным, был сценарий Lua. Вы можете ходатайствовать о такой команде, как 'INCRBYTOMAX'. – tadman
Если currentVal жестко закодирован, не могли бы вы сделать проверку после 'incr', а затем' decr'? –