我想知道,在返回最终结果之前,将一系列命令链接在一起以便它们都在redis上执行的最佳方法是什么?我所有的数据都存储在集合中。
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 ()命令参数必须是字符串或整数“:
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发布于 2017-06-08 12:48:46
tl;dr -您将一个Lua表(intersect_data)而不是字符串和可选数字传递给SRANDMEMBER。
SINTER可以以Lua表的形式返回0或多个结果。SRANDMEMBER需要一个单键名,它是一个Redis集和一个可选的(整数)参数。
在上面的逻辑中,我看到的最大的问题是,它似乎假设相交产生的结果恰好是一个。它不关心0或超过1.
假设总是从互联系统返回单个结果,则应该使用SRANDMEMBER (表中的第一个元素)调用intersect_data[1]。
https://stackoverflow.com/questions/44426366
复制相似问题