在事务中向Redis集合添加元素值
我刚接触Redis,想在一个事务里做以下事情:
增加一个键的值,然后把增加后的值添加到一个集合里。
用Redis命令的话,大概是这样的:
multi
i = incr "value"
sadd "set" i
exec
有没有什么Redis命令可以一步完成这个,不需要两次事务,也不需要在代码里处理这个值(我用的是Python)?
非常感谢!
2 个回答
0
Redis 有一个叫 GETSET 的命令(http://redis.io/commands/getset),这个命令可以让你在同一条指令中获取一个变量的“旧”值,并把它设置为一个新的值。
我几乎可以肯定,Redis 没有办法同时增加一个值并把它添加到一个集合里,因为这两者是不同的数据类型。
希望这对你有帮助!
3
很遗憾,你不能直接这样做。不过,你可以使用一个叫做MULTI/EXEC的块来确保查询的原子性,方法如下:
do {
WATCH value
i = 1 + GET value
MULTI
set value i
SADD set i
result = EXEC
} while (result == nil)