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?
SETNX
GETSET
可以接受涉及更改我在Redis中存储数据的方式的解决方案。(但是,以防万一,我保留在我的初始文本中可能遗漏的一些特定于任务的细节来对付它们的权利。)
只需使用Redis 2.2的新WATCH功能:
WATCH items-set items:foo count = GET items:foo IF count == 0: MULTI SREM items-set foo SET items:foo count-1 EXEC ELSE: MULTI SET items:foo count-1 EXEC
要理解该示例,您需要了解WATCH是如何工作的。请在http://redis.io网站上检查文档。
ps Redis 2.0.3无法做到这一点