首页 > 解决方案 > redis中获取和查询排序集,以及排序集键过期的解决方案

问题描述

我需要 Redis 中的索引结构。我有一个排名算法,应该存储数据ZADD

ZADD myset 125 id::1
ZADD myset 17 id::2

然后,我需要计数和得分最高的数据。

ZCOUNT myset -inf +inf
ZPOPMAX myset

提供我需要的东西。但是,ZPOPMAX不仅带来了最顶层,而且还删除了它。

问题 1

我需要得分最高的一个,但我不能将它从排序列表中删除。

问题2

我需要为排序列表中的每个项目设置过期时间。我知道,过期只能在 Redis 中的键上设置。但我需要一种动态排名,例如目前我排名最高的数据是 125,但 12 小时后,它将是 17,因为第一项将是其 TTL 之后的墓碑。

谢谢

标签: redisranking

解决方案


您可以探索与Sorted Set HERE相关的 Redis 命令

问题 1

我需要得分最高的一个,但我不能将它从排序列表中删除。

您可以使用以下命令:

  • ZRANGE myset 0 0 REV获取更高的分数
  • ZRANGE myset 0 0取最低分。

问题2

我需要为排序列表中的每个项目设置过期时间。我知道,过期只能在 Redis 中的键上设置。但我需要一种动态排名,例如目前我排名最高的数据是 125,但 12 小时后,它将是 17,因为第一项将是其 TTL 之后的墓碑。

但是为此,您不能使用任何 Redis 命令来使Sorted Set键过期,我建议使用 2 个分开Sorted Set的其中一个与您的常规评分系统一起增加/降低分数,第二个与第一个具有时间分数的键相同。使用过期的作业和查询键,并从两者中删除键Sorted Sets

您可以Sorted Sets通过ZRANGEBYSCORE查看链接查询使用情况。

要获得有关第二个问题的更多想法,您可以阅读此内容。


推荐阅读