如何将排序集中的一个Redis元素的得分减1,或者如果其值为0,则将其删除?目前,我正在使用$redis.zincrby user_cart, -1, params[:product_id](Rails 4.1.4),但得到的是负值。
提前致谢!
您可以编写一个 LUA 脚本在 Redis 服务器端执行此操作。你可以使用这个:
local ans = redis.call('ZINCRBY', KEYS[1], ARGV[1], ARGV[2])
if   tonumber(ans) < 1 then
    redis.call('ZREM', KEYS[1], ARGV[2]) 
end
return (tonumber(ans) < 1 and '-1' or ans)
在任何删除时,它将返回,-1否则将返回新成员分数。
这是来自测试运行的 sinnpet:
evalsha 6e8a61a2367772383f535587ce75e92d4e047fcf 1 myzset 3 blah
"3"
zrank myzset blah
(integer) 0
evalsha 6e8a61a2367772383f535587ce75e92d4e047fcf 1 myzset -3 blah
"-1"
zrank myzset blah
(nil)
evalsha 6e8a61a2367772383f535587ce75e92d4e047fcf 1 myzset -3 blah
"-1"
zrank myzset blah
(nil)
| 归档时间: | 
 | 
| 查看次数: | 1938 次 | 
| 最近记录: |