有没有办法一次性从redis列表中弹出所有列表项?

San*_*Kim 5 redis python-2.7

我想一次从 redis 列表中弹出所有列表项。

我不想在列表为空时调用lpoprpop方法,因为多次发送请求到redis-server.

我还知道我可以使用lrange方法获取所有列表,但不能弹出项目。

你能建议我吗?

我只想通过一个请求来将列表中的项目pop添加到。getredis-server

Ita*_*ber 5

Redis 没有POPALL命令,但是通过嵌入的 Lua 脚本,您可以轻松地执行此操作,例如:

local reply = redis.call('LRANGE', KEYS[1], 0, -1)
redis.call('DEL', KEYS[1])
return reply
Run Code Online (Sandbox Code Playgroud)


h0x*_*91B 5

正如 Itamar Haber 所说,使用 lrange 和 del。在管道模式下,它将作为单个命令完成。

LRANGE key 0 -1
DEL key
Run Code Online (Sandbox Code Playgroud)

  • 当其他进程推送到列表时,这似乎会产生竞争条件。例如,列表在另一个应用程序/进程执行“LRANGE”和“DEL”的 redis 之间添加了一个项目。 (3认同)
  • Redis 管道不是原子的。 (2认同)