gpt4 book ai didi

redis - 应该如何管理 Redis 有序和限制大小的集合?

转载 作者:可可西里 更新时间:2023-11-01 11:13:25 26 4
gpt4 key购买 nike

我使用 Redis sorted sets 保持排行榜,所以我使用 ZREVRANGEBYSCORE 来获得前 10 名用户。

我在排序集中的键看起来像 user-id:xxxx 值是用户获得的积分,整数。

当我检索最高的 10 个用户时 (ZREVRANGEBYSCORE general-ranking +inf -inf LIMIT 0 10) 我还需要显示这些用户的数据,该信息存储在 MongoDB 中的 Users 集合。

所以,我不能去 MongoDB 询问每次排行榜变化的前 10 名用户数据。那太过分了,所以我认为我可以存储最高的 30 或 50 个用户数据(给出偏移量),当新值可能进来时,它会在需要时替换任何值以保持固定大小。我认为这样我可以减少针对 MongoDB 的操作次数并提高性能。

所以我知道 Redis 中有列表、散列和集合,但我不确定实现此目的的数据类型和命令的最佳组合是什么,更重要的是,它们应该是字符串(集合和列表的情况)并且它们似乎没有顺序能力。我只认为修剪命令可能有助于保持固定大小。

我在概念上需要什么

假设我存储了一个 2 大小的用户列表,所以我得到:

  • {用户:“Akira”,积分:10}
  • {user: "Luca": points: 3}

如果我然后添加 {user: "Diego", points: 9248},这将删除具有 3 个点的元素,列表将是:

  • {user: "Diego": points: 9248}
  • {用户:“Akira”,积分:10}

任何建议、想法或替代方案?

最佳答案

首先,使用 ZREVRANGE general-rankings 0 9 返回前 10。

其次,在每次 ZADD 之后,只需执行 ZREMRANGEBYRANK general-rankings 0 -10 以将其限制在前 10 名。

关于redis - 应该如何管理 Redis 有序和限制大小的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33045162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com