Redis 2.0.3
В моей БД Redis у меня есть набор предметов. У каждого предмета есть счетчик, связанный с ним:
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, являются приемлемыми. (Но, на всякий случай, я оставляю за собой право противопоставить им некоторые специфические для задачи детали, которые я мог бы пропустить в первоначальном тексте.)