gpt4 book ai didi

redis - 使用 Redis 实现 "trending now"功能

转载 作者:IT王子 更新时间:2023-10-29 05:57:38 26 4
gpt4 key购买 nike

我正在处理一个包含许多项目的高吞吐量网站,正在研究实现“现在流行”类型的功能,这将允许用户快速获得最近被许多人查看的前 N ​​个项目的优先列表人,随着观看次数的减少而逐渐消失。

关于如何做到这一点的一个想法是为最近对项目的查看赋予更多权重,例如过去 15 分钟内对项目的每次查看权重为 16,对于过去 15 分钟内对项目的每次查看权重为 8过去 1 小时,过去 4 小时内的权重为 4,等等,但我不知道这是否是正确的方法。

我想在 Redis 中执行此操作,过去我们在其他项目中使用 Redis 取得了成功。

在技术上和确定趋势的最佳方法是什么?

第一个答案暗示了一个解决方案,但我正在寻找更多细节——开始悬赏。

这些都是不错的想法,但不够详细。一个人获得了一半的赏金,但仍悬而未决。

最佳答案

因此,我将从基本的时间顺序开始(例如,按时间戳计分的 item_id 的 zset),然后根据交互情况 float 。因此,您可能会认为单次互动值得 10 分钟的“新鲜度”,因此每次互动都会为相关项目的分数增加那么多时间。如果所有交互的值(value)都相同,您可以使用一个 zset 来做到这一点,并在交互发生时增加分数。

如果您想进行某种回退,例如,按交互计数的平方根而不是直接按交互计数计分,您可以使用交互分数构建第二个 zset,并使用 zunionstore 组合这与您的时间戳索引。为此,您可能想要提取现有分数,对其进行一些数学计算并在其上放置一个新分数(zadd 会让您覆盖分数)

zunionstore 可能很昂贵,对于足够大的集合,即使 zadd/zincrby 也会变得昂贵。为此,您可能只想保留得分最高的 N 个项目,比如 N=10,000,具体取决于您的应用程序需求。

关于redis - 使用 Redis 实现 "trending now"功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17036393/

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