当前位置: 首页 > 面试题库 >

在Redis中从一系列排序集中创建一个新集合

林曦之
2023-03-14
问题内容

我有许多排序后的集合用作系统上的二级索引,用户查询可能会碰到其中的一些。

ZADD scoreSet 1 "fred"
ZADD scoreSet 5 "bob"
ZADD scoreSet 2 "spodrick"

ZADD ageSet 25 "fred"
ZADD ageSet 29 "bob"
ZADD ageSet 38 "spodrick"

要使用这些索引来使所有30岁以下且得分> 2的用户

ZRANGEBYSCORE scoreSet (2 +inf
(store these in my application code)
ZRANGEBYSCORE ageSet -inf (30
(store these in my application code)
(Perform Set intersection in my application code)

但这意味着我已将所有数据从redis复制到我的应用服务器以执行交叉,是否有更有效的方法来执行此操作,而不是通过网络传输所有匹配范围,而是在Rediss中进行交叉?

我想要的是

ZRANGEBYSCORESTORE tempSet1 scoreSet (2 +inf
ZRANGEBYSCORESTORE tempSet2 ageSet -inf (30
SINTER tempSet1 tempSet2

ZRANGEBYSCORESTORE在其中执行ZRANGEBYSCORE操作并将结果存储在新集中而不是返回它们。这样,Redis就能完成所有繁重的工作,只向我发送我感兴趣的实际路口。

我该怎么做,因为我可以进行ZINTERSTORE和ZUNIONSTORE,而没有RANGESTORE似乎是我缺少了一些东西。


问题答案:

这个问题有很多可能的答案。这是我的前两个:

  1. 使用Lua的强大功能避免将数据移动到客户端,并在服务器端完成所有工作。您可以通过这种方式解决缺少RANGESTORE的问题。

  2. 维护一个排序的集合,其中使用位交织对两个属性进行评分。在Redis-verse中,有一个由antirez进行的名为redimension的实验正是这样做的。链接是https://www.reddit.com/r/redis/comments/3qjlkk/redimension_ruby_library_implementing/,而我的上述端口是Redis lua https://www.reddit.com/r/redis/comments/3s0h73/ luaredimension_redis_multiDimension_query /。您可以在多维索引中阅读有关该方法的更多信息。



 类似资料:
  • 本文向大家介绍dart 创建一个新的集合,包括了dart 创建一个新的集合的使用技巧和注意事项,需要的朋友参考一下 示例 可以通过构造函数创建集合:            

  • 在Eclipse中有在Android Studio中如何做到这一点?

  • 问题内容: 我在存储过程中的MS- SQL中有一个结果集,可以说它有一个VARCHAR列,但有很多行。我想创建一个包含所有这些值的逗号分隔的字符串,是否有一种简单的方法来执行此操作,还是我必须逐步检查每个结果并手动构建字符串? 最好是我想在存储过程本身中执行此操作。 问题答案: 这是一种方法(使用AdventureWorks2008 DB): 这是另一个(从SQL 2005开始): 在这两种情况下

  • 我想解构一个pandas DataFrame,使用列标题作为一个新的数据列,并创建一个包含行索引和列的所有组合的列表。比解释更容易展示的:

  • 我有两个熊猫数据框 步骤1:根据df1中唯一的“val”在df2中创建列,如下所示: 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'c

  • 问题内容: 在Redis排序集中获得SCORES总数的最佳方法是什么? 问题答案: 我认为唯一的选择是迭代排序后的集合并计算总和客户端。