使用Redis实现"现在趋势"功能

One*_*oob 5 trending social-networking redis

我正在开发一个包含很多项目的高吞吐量站点,我正在考虑实施"现在趋势"类型的功能,这将允许用户快速获得许多人最近查看过的前N项的优先列表,随着观看次数减少,逐渐消失.

关于如何做到这一点的一个想法是对项目的近期视图给予更多权重,例如过去15分钟项目的每个视图的权重为16,过去1中项目的每个视图的权重为8小时,过去4小时内物品的重量为4等,但我不知道这是否是接近它的正确方法.

我想在Redis中做到这一点,我们过去在Redis上取得了很好的成功.

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

第一个答案提示解决方案,但我正在寻找更多细节 - 开始赏金.

这些都是不错的想法,但还不够详细.一个得到了一半的赏金,但问题仍未解决.

Mar*_*zzi 6

因此,我将从基本时间排序开始(例如,按时间戳评分的item_id的zset),然后根据交互进行浮动.因此,您可能会认为单次互动的价值为10分钟"新鲜度",因此每次互动都会为相关项目的得分增加很多时间.如果所有交互都被平等估值,您可以使用一个zset执行此操作,并在交互发生时增加分数.

如果您希望通过交互计数的平方根而不是直接交互计数进行某种退避,您可以使用您的交互分数构建第二个zset,并使用zunionstore将其与您的时间戳索引.为此,您可能想要取出现有分数,对其进行一些数学运算并对其进行新分数(zadd将允许您覆盖分数)

zunionstore可能很昂贵,而且对于足够大的集合,甚至zadd/zincrby也会变得昂贵.为此,您可能希望只保留N个得分最高的项目,对于N = 10,000说,根据您的应用需求.