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

如何结合排序的集合Redis?

农弘毅
2023-03-14
问题内容

sorted set在Redis商店中使用type。我为每个用户创建一个自己的 KEY 并将数据放在此处:

KEY 示例

FEED:USER:**1**, FEED:USER:**2**, FEED:USER:**3**

我想从Redis中为用户键选择数据:1、2、3,并按得分(时间戳)进行排序。

如果只是简单地看问题,我需要跨时从任何KEY中选择一个数据,然后将按分数排序的所有结果组合在一起。


问题答案:

有两种方法可以执行此操作,但是正确的方法取决于您要执行的操作。例如:

  1. 您可以在代码中为每个FEED:USER:n键使用ZRANGEBYSCORE(或ZREVRANGEBYSCORE),并在客户端中“合并”答复
  2. 您可以对相关键执行ZUNIONSTORE,然后对客户端的结果执行ZRANGEBYSCORE。
  3. 但是,如果您的“进给量”很大,则#2的流量应颠倒-首先是范围,然后是联合。
  4. 您还可以使用一些Lua脚本在服务器端进行类似类型的处理。

编辑:进一步澄清

回覆。1-可以在客户端从ZRANGEBYSCORE获得的结果上进行合并,也可以使用服务器端Lua脚本来进行合并。使用WITHSCORES获取时间戳并对其进行合并/排序。不管您选择运行此代码的位置(我可能会使用Lua进行数据本地化),实现方法均由您决定-
如果您需要帮助,请执行lmk :)



 类似资料:
  • 问题内容: 我有一个Java集合: 现在在显示列表之前有一个字段,我想按此排序此集合。 有什么办法可以做到吗? 问题答案: 使用比较器: 此外,如果实现,则只需使用 使用JDK 8,语法要简单得多。 更简单 最简单的 显然,初始代码也可以用于JDK 8。

  • 问题内容: 我找不到使用此方法的任何示例,所有示例都给出了第二个参数“ null”。我听说此方法用于根据多个标准对类进行排序,但找不到示例。 对于本课程,如果我想根据学生的姓名和年龄对学生列表进行排序,如何使用方法Collections sort(List,Comparator) 问题答案: 在你现有的学生班级的基础上,这通常是我的工作方式,尤其是当我需要多个比较器时。 用法: 编辑 自Java

  • 主要内容:1 集合元素的排序,2 Collections sort方法,3 字符串正序排序,4 字符串倒序排序,5 包装类型排序,6 自定义对象排序1 集合元素的排序 我们可以对以下元素进行排序: 字符串对象 包装类对象 用户自定义对象 Collections类提供用于对集合的元素进行排序的静态方法。如果集合元素为Set类型,则可以使用TreeSet。但是,我们无法对List的元素进行排序。Collections类提供用于对List类型元素的元素进行排序的方法。 2 Collections so

  • 问题内容: 我是Java的初学者。请建议可以/应该使用哪些集合来维护Java中的排序列表。我尝试了和,但它们不是我想要的。 问题答案: 这来得很晚,但是JDK中有一个类只是为了获得排序列表。它被命名(与其他Sorted*接口有些混乱)“ ”。它可以排序或使用Comparator。 与 sorted using 的区别在于,通过使用堆数据结构,这将始终保持部分顺序,具有O(log(n))插入性能,而

  • 我有一个结构数组 我希望合并并按升序排序数组。然而,当我执行合并时,没有任何变化。这是我用来创建struct数组的代码,以及MergeSort的函数调用。最大用户数是我从二叉树中转换节点数得到的整数,它应该是数组的最大数量。 任何提示或提示都将不胜感激! 编辑:当我尝试编写一些printf语句时,我注意到这些值是负数。但是存储在结构中的值是正数。这个错误的原因是什么?

  • 事情是这样的。我在做leetcode 164最大间隙。最佳解决方案是桶排序。 这让我对排序问题有了更多的思考。假设我们有如下列表: 2、5、19、444、-14、89、16、77 我认为,我们可以用两个不同的范围来排列这些数字,(min, mid)(mid, max)和mid-应该是min(max-min)/2; 因此我们得到了(-14215)(216444) 我们将min设置为最左侧,max设置