Redis Lua 函数支持 BLPOP 吗?

问题描述 投票:0回答:1

当我尝试这个粗略的例子时,我立即得到一个 nil(不是 5 秒的块)。无法在文档中找到有关 Lua 函数中支持或不支持的命令的任何内容

#!lua name=supported_commands

local function bl_pop_test(keys, args)
  local test_key = keys[1]

  return redis.call('BLPOP', test_key, 5)

end

redis.register_function('bl_pop_test', bl_pop_test)

我的猜测是,因为函数阻塞,所以不支持调用阻塞命令?只是好奇是否有其他人遇到过这个..

redis lua
1个回答
0
投票

来自 BLPOP 文档

在 MULTI / EXEC 块内使用 BLPOP 没有多大意义,因为它需要阻塞整个服务器才能原子执行该块,而这又不允许其他客户端执行推送操作。因此,当列表为空时,MULTI / EXEC 内的 BLPOP 的行为是返回 nil 多批量回复,这与达到超时时发生的情况相同。

Lua 脚本以原子方式执行,也就是说,在脚本运行时不会运行其他脚本或命令,这为我们提供了与 MULTI / EXEC 相同的事务语义(source)。

© www.soinside.com 2019 - 2024. All rights reserved.