dot 未来的速度将在你所在的城市举办的活动中出现。

加入我们在 Redis 发布会

Redis 推荐…

Redis and Golang

你刚看完《毒枭》第二季,正准备陷入狂欢后的沉闷,这时 Netflix 弹出一个推荐。“因为你喜欢《毒枭》,你应该看看..《毒枭:墨西哥》。"

不只是 Netflix。《纽约时报》也这样做,亚马逊这样做,谷歌这样做,甚至你孩子的学校应用程序也有推荐。

应用程序每天都在变得更加智能,依靠非常聪明的开发者和技术来提取见解以做出这些推荐,这已不是秘密。什么才是有效的推荐?一些你可能会采取行动的推荐!

如何获得这样的推荐?虽然有很多算法可以分析数百个不同的变量来让你在周日早上阅读合适的文章,但也有一些非常简单的算法。具有相同特征的人——地理位置、人口统计、过去的偏好、过去的厌恶——组成了一个丰富的潜在推荐者库。一些非常简单的方法包括简单的老式比较。计算哪些用户与你最相似,哪些用户与你以相同的顺序做过同样的事情,哪些物品是他们喜欢的但你还没有看过的,这为我们提供了一个非常简单的途径来为你生成下一组推荐。

在开发人员术语中,实现比较可以通过多种不同的方式完成——但为什么费力地编写复杂的代码来执行这些比较,当你可以使用一个具有内置集合操作的数据库,它可以为你完成这些工作呢?

Redis 是世界上少数几个拥有复杂集合操作的数据库之一。Redis 排序集 广受欢迎、功能强大,并且擅长解决多种问题。内置的集合操作非常适合许多事情,例如时间序列数据、竞价管理、评分、排名等等。它们也是实现推荐算法的一种非常简单的方法。
从概念上讲,它非常简单——你有成千上万的用户——要找到最相似的用户,你需要比较用户。简单的集合交集操作将为你提供对同一物品进行评分的用户,简单的集合并集操作可以找到对一组物品进行评分的所有用户。根据谁对共同的物品进行评分的相似度,你生成一个相似度分数,并根据这个分数(排序集操作,如 ZRANGE,按分数范围提取最相似的用户),你找到与当前用户最相似的顶级用户。执行类似的步骤以找到他们排名靠前的物品,但这些物品还没有被你的当前用户购买/看到,这应该可以为你提供要向你的用户提供的顶级推荐!

Redis 排序集的妙处在于,它会自动并在内存中以分数为依据维护每个成员的排序视图。这与集合操作相结合,可以实现极快的检索时间,这意味着你可以用很少的精力实现一个简单、性能极高的推荐引擎。我们就是这么做的!我们最近在 github 上发布 了一个简单的用 Go 编写并使用 Redis 的推荐引擎的代码。这个引擎的另一个妙处是它易于扩展。它使用用户评分作为计算相似度的唯一标准来实现,但也很容易添加位置、人口统计和其他特征!这篇白皮书 描述了它的工作原理——所以请下载它以及代码!