Redis的:如何相交一个“正常”的设置与有序集合?(Redis: How to intersect

2019-07-29 07:18发布

假设我有一组(或排序设置或列表中,如果这将是更好)100-1000 字符串

然后,我有更多的字符串的有序集合B,说一万美元。

现在C应该A的交叉点和B(当然串)。

我想有每个元组(X,SCORE_OF_X_IN_B),其中X是在C语言

任何的想法?

我有两个想法:

  1. Interstore
    • 存储一个有序集合每比分为0
    • interstore到d
    • 得到d的每一个项目
    • 删除d
  2. 在客户端简单的循环
    • 环在我的客户PROGRAMM
    • 得到zscore为每串

尽管1.对Redis的侧路开销太大(必须写例如Redis的页面状态相当高的时间复杂度,太。 http://redis.io/commands/zinterstore ),2.将不得不| A | 数据库连接,并不会是一个好的选择。

也许我可以写一个Redis的/ LUA脚本,它会像zscore但字符串任意数量的,但我不知道如果我的主机托管服务提供商允许脚本...

所以,我只是想问问所以,如果有可没有脚本的优雅和快速的解决方案!

Answer 1:

有一个简单的解决问题的方法: ZINTERSTORE将与合作SETZSET 。 尝试:

redis> sadd foo a
(integer) 1
redis> zadd bar 1 a
(integer) 1
redis> zadd bar 2 b
(integer) 1
redis> zinterstore baz 2 foo bar AGGREGATE MAX
(integer) 1
redis> zrange baz 0 -1 withscores
1) "a"
2) "1"

编辑:我加入AGGREGATE MAX如上所述,由于redis的会给(非排序)设置的每个成员foo的默认得分1 ,和SUM与任何得分它在(排序)集合bar



文章来源: Redis: How to intersect a “normal” set with a sorted set?
标签: redis