How can I decrement score of one Redis element by 1 in sorted set or remove it if it's value is 0? Currently I am using $redis.zincrby user_cart, -1, params[:product_id]
(Rails 4.1.4), but I get negative values.
Thanks in advance!
How can I decrement score of one Redis element by 1 in sorted set or remove it if it's value is 0? Currently I am using $redis.zincrby user_cart, -1, params[:product_id]
(Rails 4.1.4), but I get negative values.
Thanks in advance!
You can write a LUA script that does it on the Redis server side. You can use this one:
On any deletion it will return
-1
otherwise it will return the new member score.Here's a sinnpet from a test run:
ZINCRBY's reply is the new score so you can check it and issue a ZREM if it is < 1.