如何在不使用 SPOP <set> <count> 的情况下原子地从 REDIS SET 中弹出多个项目?
How to pop multiple items from a REDIS SET atomically without using SPOP <set> <count>?
SPOP [set] [count] 在 Redis v3.2 中引入 - https://redis.io/commands/spop ,我的 REDIS 版本是 2.7.
如何使用 cli 命令从 SET 中自动弹出多个项目?
是否可以做类似...的事情?
MULTI
a = SPOP myset //It would be nice if I could store this in a variable?
b = SPOP myset
...
SREM a
SREM b
...
EXEC
//
是的,MULTI
与一系列 SPOP
相结合将 return 结果作为 EXEC
调用的一部分:
each element being the reply to each of the commands in the atomic transaction
来源:https://redis.io/commands/exec
MULTI
SPOP myset
SPOP myset
EXEC
作为替代方案,您还可以使用 Lua 脚本,在 Redis 2.6 中引入了 EVAL
:这将允许您使用变量(托管在脚本本身的范围内,这是 运行 在 Redis 进程上)和类似的但可能更复杂,对于您的场景来说可能有点矫枉过正。
附带说明一下,SPOP
已经在删除项目,因此没有必要 SREM
它们。
SPOP [set] [count] 在 Redis v3.2 中引入 - https://redis.io/commands/spop ,我的 REDIS 版本是 2.7.
如何使用 cli 命令从 SET 中自动弹出多个项目?
是否可以做类似...的事情?
MULTI
a = SPOP myset //It would be nice if I could store this in a variable?
b = SPOP myset
...
SREM a
SREM b
...
EXEC
//
是的,MULTI
与一系列 SPOP
相结合将 return 结果作为 EXEC
调用的一部分:
each element being the reply to each of the commands in the atomic transaction
来源:https://redis.io/commands/exec
MULTI
SPOP myset
SPOP myset
EXEC
作为替代方案,您还可以使用 Lua 脚本,在 Redis 2.6 中引入了 EVAL
:这将允许您使用变量(托管在脚本本身的范围内,这是 运行 在 Redis 进程上)和类似的但可能更复杂,对于您的场景来说可能有点矫枉过正。
附带说明一下,SPOP
已经在删除项目,因此没有必要 SREM
它们。