【发布时间】:2017-06-08 20:48:46
【问题描述】:
我想知道将一系列命令链接在一起以便在返回最终结果之前都在 redis 上执行的最佳方法是什么?我所有的数据都存储在 Sets 中。
data1 = [ a, b, c, d, e]
data2 = [b, c]
我将如何获取 data1 和 data2 的交集 (result=b,c),然后在结果上调用 SRANDMEMBER?在一个系列中,它看起来像:
redis> SINTER data1 data2
redis> SRANDMEMBER <previous result>
当然可以有其他操作链接在一起,如 SDIFF 和 SADD,但从交叉点中选择一个随机项目似乎是最简单的例子。
我尝试创建一个 lua 脚本,但当我尝试执行以下代码时收到消息“Lua redis() 命令参数必须是字符串或整数”:
local k1, k2 = KEYS[1], KEYS[2]
local intersect, single_record
if not redis.call("exists", k1) then return 0 end
intersect_data = redis.call("SINTER", k1, k2)
single_record = redis.call("SRANDMEMBER", intersect_data)
return single_record
【问题讨论】:
-
MULTI在 Lua 脚本的上下文中没有意义,因此在尝试调用它时被禁用。 -
“将一系列命令链接在一起的最佳方式是什么,以便它们在返回最终结果之前都在 redis 上执行”。而且我从来没有说过要使用 lua 脚本。