Php 如何组合已排序的集合Redis?

Php 如何组合已排序的集合Redis?,php,redis,Php,Redis,我在Redis store中使用排序集类型。 我为每个用户创建一个自己的密钥,并将数据放在此处: 关键点示例: 我想从Redis中为用户的键选择数据:1、2、3,并按分数时间戳对每个键进行排序 如果简单地看问题,我需要从任意键中选择一个跨时间的数据,然后将所有按分数排序的结果合并。有几种方法可以做到这一点,但正确的方法取决于您正在尝试做什么。例如: 您可以在代码中为每个FEED:USER:n键使用ZRANGEBYSCORE或ZREVRANGEBYSCORE,并在客户端中合并回复 您可以对相关键执

我在Redis store中使用排序集类型。 我为每个用户创建一个自己的密钥,并将数据放在此处:

关键点示例:

我想从Redis中为用户的键选择数据:1、2、3,并按分数时间戳对每个键进行排序


如果简单地看问题,我需要从任意键中选择一个跨时间的数据,然后将所有按分数排序的结果合并。

有几种方法可以做到这一点,但正确的方法取决于您正在尝试做什么。例如:

您可以在代码中为每个FEED:USER:n键使用ZRANGEBYSCORE或ZREVRANGEBYSCORE,并在客户端中合并回复 您可以对相关键执行ZUNIONSTORE,然后对客户端的结果执行ZRANGEBYSCORE。 然而,如果您的提要很大,那么2的流应该是反向的-首先是范围,然后是联合。 您还可以使用一些Lua脚本在服务器端完成类似类型的处理。 编辑:进一步澄清


Re。1-可以根据从ZRANGEBYSCORE获得的结果在客户端进行合并,也可以使用服务器端Lua脚本进行合并。使用WithCore获取时间戳并对其进行合并/排序。无论您选择运行此代码的位置如何,我可能都会使用Lua作为数据位置,如果您需要帮助,具体实现取决于您-lmk:

请您详细解释第1段。我需要一个如何合并的例子。我在排序集中的分数是时间戳。如果我从FEED:USER:1和FEED:USER:2获取项目,那么如何合并它们?大约2。项目:我不允许制作ZUNIONSTORE,因为我需要从其他用户选择所有数据,即使它们的权重相同。在你告诉我要做ZRANGEBYSCORE之后。对Redis store执行第二个查询?还是仅在客户端PHP?大约1。项目:我可以通过每个键获取所有数据。但是如何组合数据呢?按什么顺序?我试着在1上展开。Re 2.-我不确定我是否理解为什么不能使用ZUNIONSTORE-如果来自两个不同用户的同一成员存在,结果仍然会包含它。例如,首先我使用ZUNIONSTORE,结果得到合并键的数量,那么如何限制数据?我想从每把钥匙上拿到最新的10张钞票
FEED:USER:**1**, FEED:USER:**2**, FEED:USER:**3**