如何组合排序集Redis?

时间:2014-10-08 12:55:07

标签: php redis

我在Redis商店中使用sorted set类型。 对于每个用户,我创建了一个自己的 KEY 并将数据放在此处:

KEY:

的示例
FEED:USER:**1**, FEED:USER:**2**, FEED:USER:**3**

我想从Redis中为用户的密钥选择数据:1,2,3,并按分数(时间戳)排序。

如果只是简单地看待问题,我需要在任何时间点选择任何一个数据,然后结合按分数排序的所有结果。

1 个答案:

答案 0 :(得分:2)

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

  1. 您可以在代码中为每个FEED:USER:n键使用ZRANGEBYSCORE(或ZREVRANGEBYSCORE),并且"合并"客户回复
  2. 您可以在相关密钥上执行ZUNIONSTORE,然后对客户端的结果执行ZRANGEBYSCORE。
  3. 但是,如果您的" Feed"很大,#2的流量应该颠倒过来 - 首先是范围,然后是联合。
  4. 你也可以使用一些Lua脚本完全在服务器端进行类似的处理。
  5. 编辑:进一步澄清

    重新。 1 - 可以在客户端对从ZRANGEBYSCORE获得的结果进行合并,也可以使用服务器端Lua脚本来完成。使用WITHSCORES获取时间戳并对其进行合并/排序。无论您选择运行此代码的位置(我可能使用Lua进行数据本地化),实现都取决于您 - 如果您需要帮助,请执行以下操作:)