排序集的“全局”计算

时间:2011-11-14 09:39:01

标签: redis

使用排序集,是否有一种简单的方法来计算“全局”值,例如集合中所有分数的平均值,中位数,最大值,分钟等,或者我是否总是需要提取分数并自己做计算(这有点痛苦......)?

3 个答案:

答案 0 :(得分:4)

你可以用ZCARD和ZRANGE(当然有分数)来做这一切。

  • Min:ZRANGE on index 0
  • Max:ZRANGE on max index(ZCARD value)
  • 中位数:ZRANGE中间指数(ZCARD / 2)
  • 平均值:您可以将所有分数的总和存储在另一个计数器中,然后将其除以ZCARD值

答案 1 :(得分:1)

没有简单的方法可以做到这一点。聚合命令不多。

编辑:如果这就是你必须要做的事情,那么排序集(甚至是redis)可能不是你想要的。你能详细说明你的用例吗?

答案 2 :(得分:0)

您可以添加另一个键,其中包含排序集中所有分数的总和。您必须在每次插入/更新/删除已排序集时手动更新它(在multi / exec中)。然后你可以得到这个值并用ZCARD除以得到平均值。