【问题标题】:Fetchin and Querying Sorted Sets in redis, And a solution for expiring sorted set keysredis中获取和查询排序集,以及排序集键过期的解决方案
【发布时间】:2021-11-29 00:56:45
【问题描述】:

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

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

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

ZCOUNT myset -inf +inf
ZPOPMAX myset

提供我需要的东西。但是,ZPOPMAX 不仅带来了 toptop,而且还移除了它。

问题 1

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

问题 2

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

谢谢

【问题讨论】:

    标签: redis ranking


    【解决方案1】:

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

    问题 1

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

    您可以使用以下命令:

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

    问题 2

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

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

    你可以用ZRANGEBYSCORE查询Sorted Sets,用法见LINK

    如需了解第二个问题的更多想法,您可以READ THIS

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 2016-11-30
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多