如何在不使用 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 它们。