gpt4 book ai didi

caching - 基于投票的网站/应用程序的架构

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

我正在做一个网站。我想获得有关设计的反馈。网站功能类似于 Reddit、ProductHunt 等(即基于投票)。这是概述1.后端服务从网络上获取帖子并存储到数据库中。2. 帖子显示在网站上(置顶,新)。3. 顶部显示基于排名(投票、时间因素)的网站。4.滚动,用户看到更多帖子

设计:

数据库表:帖子、用户、投票

后端服务:后端服务定期从网络上获取帖子并存储到数据库( Posts 表)中。

网站:当用户访问网站时,用户会看到热门帖子。根据请求,网站代码查询数据库,该数据库返回根据时间和投票排名的链接。当使用特定帖子投票时,网站代码将其添加到数据库中。网站允许登录并将用户信息存储在用户表中。

问题:我是否应该考虑使用 Redis 缓存而不是查询数据库来获取每个请求的排名帖子?如果是,那么应该将什么存储到缓存中,更新缓存的逻辑应该是什么?

如果我最终使用缓存,那么缓存应该有两个条目。一、排名帖 1、新增帖。对于排名帖子,后端服务是否应该定期更新缓存?对于新帖子,每当从网络上获取新帖子时,我应该使缓存无效吗?

还有如果我使用缓存路由如何处理无限滚动?示例:用户根据排名查看帖子。用户在 15 分钟后滚动查看新帖子。到那时排名可能已经改变。

如果有任何反馈/帮助,我将不胜感激!

最佳答案

我认为 Redis 将在性能方面为您提供很多帮助,您可以将其用作缓存,也可以用作真正的数据库(它拥有您需要的一切 - 持久性、备份、主从复制、服务器端集群) .
如果您想将其用作缓存,可以这样做:

  • 对于已排名的帖子,您可以使用 Sorted Sets .这将允许您为每个帖子获得一个分数,这将是票数,并且它将根据该分数对您的帖子进行排序。您有一个增加现有帖子分数的命令 - ZINCRBY .可以在更新数据库的同时更新缓存
  • 对于新帖子,您可以使用 lists , 因为您可以轻松地在列表前面添加元素,所以在创建新帖子时,使用 LPUSH并使用 LTRIM 保持固定长度
  • 对于无限滚动有更多的解决方案,都有它们的价格:你可以使用命令 ZRANGEBYSCORE使用 Limit 参数获取项目有序,因此如果在此期间发生某些变化,您可能不会显示它
  • 此外,每当您需要以原子方式执行 2 个或更多命令时,例如,如果您希望创建的新帖子始终保持最新的 50 个,您需要将 LPUSH 和 LTRIM 作为一个命令调用,您可以这样做与 LUA Scripting

关于caching - 基于投票的网站/应用程序的架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32263130/

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