gpt4 book ai didi

php - 数据不断变化时 "Recently Online"列表的排序策略(PHP)

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

在为“最近在线的成员”应用 View 创建分页列表时,我们遇到了一个有趣的挑战。挑战的根源在于对定期更新的数据进行分页。

当成员(member)在应用程序中启动 View 时,只需调用数据库即可轻松获取给定位置的列表(例如,根据纽约最近的登录顺序)。这非常适用于第一组(第 1 页)。但是,当成员滚动并且应用程序请求下一组(第 2 页)时,列表可能会在其顶部添加新成员,这会导致结果集 1 和 2 之间发生重叠,依此类推。

为了让事情更复杂一点,我们希望将结果中的帐户 ID 存储在 Redis 中,以防止不必要的重复 MySQL 查询命中数据库并帮助加快速度。

我们考虑过使用时间戳作为起点。这个策略给了我们一个设定的时间点,确保我们的列表总是按顺序返回,直到成员拉取刷新列表。但是,此解决方案的问题意味着数据库每次都会受到攻击,并且无法有效使用 Redis。

此外,成员(member)可能会将他们的应用程序显示在“最近在线” View 中,离开应用程序并在 30 分钟后返回并继续从他们所在的位置滚动,这肯定会导致意想不到的结果。

有没有人有好的解决方案或策略来解决此类问题,同时又不会造成不稳定的用户体验和不必要的服务器资源负担?

最佳答案

我们已经制定了应对这一挑战的战略,这解决了我们正在努力完成的大部分问题。为了解决这个问题,我们正在实现以下措施。

当成员(member)请求“谁最近在线”时,我们会生成一个最多 150 个帐户的本地成员(member)列表。整个列表以逗号分隔的成员 ID 字符串传递给应用程序,以便应用程序拥有一组可以翻页的记录。这解决了依赖 API 了解成员在任何给定时间在列表中的位置的问题。

在初始请求中,我们还包含前 15 个最近登录帐户的成员(member)信息,这样无需再次调用 API 即可填充屏幕。由于我们已经传递了在线即时列表的完整快照,应用程序可以通过将他们的 ID 传递给我们的 API 来请求下一组 15 个帐户,以返回这些帐户详细信息。

当成员(member)执行下拉刷新或离开列表并在移动到应用程序的另一个区域后返回列表时,整个过程将重新开始。

这就是我们解决分页问题的方法。本质上是及时为应用程序提供快照,并让它翻阅该快照,直到需要更新/更新列表为止。

关于php - 数据不断变化时 "Recently Online"列表的排序策略(PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37448123/

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