在Redis中,是否可以跨多个排序集对成员进行排序?

布赖恩

我在Redis中跟踪多个排序集中的成员,以此对成员进行多列索引。举例来说,假设我有两个Sorted Sets lastseen(时间点)和points,并且我将用户名存储为这些Sorted Sets中的成员。

我想首先进行排序,lastseen以便可以在最后一天或一个月内看到用户,然后我要对结果成员进行排序,points这样我就可以有效地对过去一天或一个月内看到的成员按点进行排序。

如果我可以将对ZREVRANGEBYSCORE的调用结果存储到新的Sorted Set(我们称为新的Sorted Set temp)中,这将很容易,因为这样我就可以对lastseen限制进行排序,将结果存储到temp,对temppoints与一起使用ZINTERSTORE out(存储到result)的权重为零,最后在上再次使用ZREVRANGEBYSCORE result但是,Redis中没有内置的方法将ZRANGE的结果存储到新的Sorted Set中。

我调查了此处发布的解决方案的使用情况,尽管它似乎可以正确地排列结果顺序,但排序集中的结果分数不再能够用于根据时间准确地限制结果(即,只需要最后一天内的结果) 。

例如:

redis> ZADD lastseen 12345 "foo"
redis> ZADD lastseen 12350 "bar"
redis> ZADD lastseen 12355 "sucka"
redis> ZADD points 5 "foo"
redis> ZADD points 3 "bar"
redis> ZADD points 9 "sucka"

假设我的时间范围在12349之间12356我想得出的最终结果是成员列表['sucka', 'bar']

凯文·克里斯托弗·亨利

我能想到的解决方案是:

1)您的愿望是ZREVRANGEBYSCORE,以某种方式保存临时结果。取而代之的是,您可以复制zset(可以通过ZINTERSTORE仅使用一个set作为参数来完成zset ),然后ZREMRANGEBYSCORE对新副本执行a来摆脱您不感兴趣的时间,然后执行final ZINTERSTORE

2)按照Eli的建议,在客户端上循环执行。

3)在Lua脚本中执行相同的操作。

这些都是潜在的昂贵操作,因此最有效的方法取决于您的数据和用例。在不了解更多信息的情况下,我个人会倾向于使用Lua解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Redis中排序集可以存储的成员数量是否有上限?

Redis中的排序集基于多个条件

Eclipse-保存时对成员进行排序

Eclipse PHP Oxygen(Eclipse 2017)如何对成员进行排序?

跨多个键对嵌套字典进行排序

跨多个字典对键进行排序

无法对数组进行排序:“对成员'<'的引用不明确”

通过指向基类的数组对成员数据进行排序

是否有Eclipse快捷方式可按修饰符对成员排序?

是否可以使用合并排序(C#)根据多个条件对数组进行排序?

是否可以按列名中的值对列进行排序?

是否可以在“for in”循环(Python)中对列表进行排序

是否可以在ConEmu中对标签进行重新排序?

是否可以在NHibnernate IQueryable中按类类型进行排序

是否可以在vim中对一组行进行排序?

在Excel 2007中是否可以按单词对列进行排序?

是否可以使用discord.js对成员进行静音?

在SAS中对几乎排序的数据集进行排序

Redis中可以存储排序集的最大值/精度是多少

我们可以将列表作为值添加到 redis 中的排序集吗?

是否可以将具有多个小数点的数字视为数字以检查列中是否存在字母字符并对 R 中的列进行排序?

使用 Spark 对 Parquet 数据集进行排序并将排序结果存储为 S3 中的多个文件

redis 排序集分数是否有大小限制?

如何在同一页面中对多个查询集进行分页和排序?

如何在一行中对具有多个数据集的数据进行排序?

在Linux中对多个文件进行排序

在Linux中对多个文件进行排序

在marklogic 8中对多个地图进行排序

对对象中的多个属性进行排序