首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis链命令

Redis链命令
EN

Stack Overflow用户
提问于 2017-06-08 03:56:48
回答 1查看 574关注 0票数 0

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

代码语言:javascript
复制
data1 = [ a, b, c, d, e]
data2 = [b, c]

如何获得data1和data2 (result=b,c)的交集,然后对结果调用SRANDMEMBER?在一个系列中,它应该是这样的:

代码语言:javascript
复制
redis> SINTER data1 data2
redis> SRANDMEMBER <previous result>

当然,还有其他操作可以链接在一起,比如SDIFF和SADD,但是从交叉口选择一个随机项似乎是最简单的例子。

我尝试创建一个lua脚本,但是当我试图执行以下代码时,我收到了消息"Lua ()命令参数必须是字符串或整数“:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-08 12:48:46

tl;dr -您将一个Lua表(intersect_data)而不是字符串和可选数字传递给SRANDMEMBER

SINTER可以以Lua表的形式返回0或多个结果。SRANDMEMBER需要一个键名,它是一个Redis集和一个可选的(整数)参数。

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

假设总是从互联系统返回单个结果,则应该使用SRANDMEMBER (表中的第一个元素)调用intersect_data[1]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44426366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档