gpt4 book ai didi

Redis:多个排序集中的成员的分页有序 zrank 获取

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

Redis 新手。需要一些帮助。

用例:我有成千上万的排行榜。他们的用户名中有适当的分数。一个用户可以属于 1 个或多个排行榜。我需要一种有效的方法来获取特定用户所属的每个排行榜的排名,最好按排名和分页排序。典型的用户将属于数百个排行榜。

据我所知:我为每个用户保留了一组,其中包含他所属的板。为了获得用户的排名,我得到了他的一组板,然后对组中的每个板进行 zrank,然后在我的代码中按排名排序。这看起来效率很低,而且不支持分页。

我一直在阅读和集思广益,但我被困住了。我需要的是这样的:

user1:boards (a,c,e)
board:a (user1,user23,user5)
board:b (user2,user7,user12)
board:c (user2,user1,user42)
board:d (user36,user4,user9)
board:e (user6,user19,user1)

SORT user1:boards BY board:*->user1

类似于按散列字段排序,除了 -> 在这种情况下表示提供的成员的排序集合分数。如果存在这样的功能,性能会有所提高吗?还是与流水线化所有 zrank 相同?

谢谢。

最佳答案

为了提高读取效率,您只需对写入进行微小的更改。当前,您正在将用户板存储在一个集合中,而是将它们存储在一个已排序的集合中。让我们称之为 user_boards_sorted_set。因此,每当您在排行榜排序集(例如 board1)中增加用户 1 的分数时,您都会在 board1 上为用户 1 运行 zrank,并且该排名成为 user_boards_sorted_set 中 user1 的分数。这样 user_boards_sorted_set 始终包含用户所属的所有板,并且每个条目的分数包含他在该特定排行榜中的排名。在 user_boards_sorted_set 上运行 ZRANGE,您将让用户及其在所有排行榜中的排名按排名排序。

更新:基于评论中的反馈,以及上述答案中的错误假设。

另一个好方法是使用 Lua 脚本通过对用户所属的所有看板执行 ZRANK 并在 LUA 本身中对其进行排序来获得个人看板排名。这将带来显着的性能提升,因为所有 ZRANKS 和排序都是在服务器端本身完成的,并减少了网络传输。

关于Redis:多个排序集中的成员的分页有序 zrank 获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29404375/

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