Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua Redis链命令_Lua_Redis - Fatal编程技术网

Lua Redis链命令

Lua Redis链命令,lua,redis,Lua,Redis,我想知道将一系列命令链接在一起的最佳方式是什么,以便它们在返回最终结果之前都在redis上执行?我所有的数据都存储在集合中 data1 = [ a, b, c, d, e] data2 = [b, c] 我如何获取数据1和数据2的交集(result=b,c),然后调用SRANDMEMBER处理结果?在一个系列中,它看起来像: redis> SINTER data1 data2 redis> SRANDMEMBER <previous result> tl;dr-您正在

我想知道将一系列命令链接在一起的最佳方式是什么,以便它们在返回最终结果之前都在redis上执行?我所有的数据都存储在集合中

data1 = [ a, b, c, d, e]
data2 = [b, c]
我如何获取数据1和数据2的交集(result=b,c),然后调用SRANDMEMBER处理结果?在一个系列中,它看起来像:

redis> SINTER data1 data2
redis> SRANDMEMBER <previous result>

tl;dr-您正在将Lua表(
intersect\u data
)而不是字符串和可选数字传递到
SRANDMEMBER

SINTER
可以将0个或更多结果作为Lua表返回
SRANDMEMBER
需要一个单个键名,该键名是Redis集合和可选的计数(整数)参数

我看到的上述逻辑的最大问题是,它似乎假设相交只产生一个结果。它不关心0或超过1


假设始终从intersect返回一个结果,则应使用
intersect\u数据[1]
(表中的第一个元素)调用
SRANDMEMBER

并且可能适合您。
MULTI
在Lua脚本的上下文中没有意义,因此在尝试调用它时被禁用。“将一系列命令链接在一起,使它们在返回最终结果之前都在redis上执行的最佳方式是什么“。我从来没有说过要使用lua脚本。有什么方法可以对Luna表执行redis命令或隐藏Luna表吗?有-lua的
unpack
就是为了这个,但是请注意
SRANDMEMBER
接受一个键作为输入
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