如何组合已排序的集合Redis


How combine the sorted sets Redis?

我在Redis存储中使用sorted set类型。对于每个用户,我创建一个自己的KEY,并将数据放在这里:

KEY示例:

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

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

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

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

  1. 您可以在代码中为每个FEED:USER:n键使用ZRANGEBYCORE(或ZREVRANGEBYSCORE),并在客户端中"合并"回复
  2. 您可以对相关的密钥执行ZUNIONSTORE,然后对来自客户端的结果执行ZRANGEBYCORE
  3. 然而,如果你的"feed"很大,#2的流量应该反转——先是range,然后是union
  4. 您也可以使用一些Lua脚本在服务器端进行类似类型的处理

编辑:进一步澄清

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