【问题标题】:Redis - getting 5 elements at a time from a sorted setRedis - 从排序集中一次获取 5 个元素
【发布时间】:2016-05-10 14:59:42
【问题描述】:

我有一个实时增长的排序集,它包含一些 ID,我想以相反的顺序一次检索 5 个 ID。这基本上是为了实现分页。这些 ID 是 Hashmap 的键。有没有办法使用 redis ZSet 操作一次有效地获取 5 个元素?

例如,在下面的排序集中,假设我想在“572c7d87e53156245a3fd167”之前获取 5 个元素,如果在运行时的最后一个元素之后可能会继续添加新 ID,我该怎么做?预期的结果应该给我 ID 572c7c58e53156245a3fd166、572c7ad2e53156245a3fd165、572c746e1eeba6b059b08f1b、572c74531eeba6b059b08f1a 和 572c7c6fc9612adca579。

 1) "572b58c0dd319a1a4703eba8"
 2) "1462429760.8629999"
 3) "572c697e612ad65757cca4f7"
 4) "1462499582.6889999"
 5) "572c6a8e612ad65757cca4f8"
 6) "1462499854.056"
 7) "572c6fc9612ad65757cca4f9"
 8) "1462501193.927"
 9) "572c74531eeba6b059b08f1a"
10) "1462502355.5250001"
11) "572c746e1eeba6b059b08f1b"
12) "1462502382.313"
13) "572c7ad2e53156245a3fd165"
14) "1462504018.325"
15) "572c7c58e53156245a3fd166"
16) "1462504408.1370001"
17) "572c7d87e53156245a3fd167"
18) "1462504711.4200001"
19) "572c7da3e53156245a3fd168"
20) "1462504739.352"

【问题讨论】:

  • 你看过zrevrange吗?
  • 感谢@ItamarHaber。是的,我看过了。就我而言,主要挑战在于分数的值。因此,如果我想要最后 N 个值,则很难为分数设置下限以提供范围。

标签: redis sortedset


【解决方案1】:

一种选择是查看ZRANGEBYLEXZRANGEBYSCORE 并使用偏移量/计数。

但是,我通常为分页所做的是创建一个不会动态更改的新列表(原始列表的一种快照),然后从那里加载数据。这样一来,它就不会像追逐一个移动的目标了。我只是给它设置了一个 TTL,然后就忘了它。

【讨论】:

  • 谢谢。这是一种有趣的方式。即使在规模上,这对您也有效吗?似乎如果用户太多,那么周围就会有很多这样的列表。
  • 我的 TTL 是 20 分钟,我将列表限制为 1000 个键。每个密钥大约 32 字节。所以我每个用户大约有 32KB。这意味着我可以使用 320MB 支持 10000 个“并发”用户。这对我的网站来说已经绰绰有余了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多