Redis 2.0.3
В моей Redis DB у меня есть набор элементов. С каждым элементом связан счетчик:
MULTI
SADD "items-set" "foo"
INCRBY "items:foo" 10000
EXEC
Новые элементы добавляются в набор через случайные интервалы.
Когда пользователь выполняет определенное действие, счетчик уменьшается:
new_counter = DECR "items:foo"
Мне нужно атомарно удалить элемент из установить, когда счетчик упадет ниже нуля (альтернативно: когда счетчик точно достигнет нуля, я могу исправить логику для этого.)
if new_counter < 0 then
MULTI
SREM "items-set" "foo"
DEL "items:foo"
EXEC
end
Как я могу сделать это без блокировки по имени элемента с помощью SETNX
/ GETSET
?
Решения, предполагающие изменение способа хранения данных в Redis, являются приемлемыми. (Но, на всякий случай, я оставляю за собой право противопоставить им некоторые детали конкретной задачи, которые я мог пропустить в исходном тексте. )