当前位置:  开发笔记 > 编程语言 > 正文

在类似reddit的网站上进行缓存的最佳方式

如何解决《在类似reddit的网站上进行缓存的最佳方式》经验,为你挑选了1个好方法。

我们有一个像reddit这样的PHP网站,用户可以投票选出故事.

我们试图在网站上使用APC,memcached等,但我们放弃了.问题是我们想要使用缓存机制,但用户可以在网站上随时进行投票,缓存的数据可能会老化并且让其他访问者感到困惑.

让我用一个例子来解释,我们有一个100个故事的数组并存储在缓存中5分钟.用户投票选择了一些故事,以便更改故事的评级.当其他用户进入网站时,他/她将看到缓存的数据,因此将看到旧数据.(如果选民用户刷新页面,则相同,他也会看到故事的旧投票编号.)

我们无法弄明白,任何帮助都将受到高度赞赏



1> 0xfe..:

这是在低延迟更新和整体系统/网络负载(又称性能与成本)之间找到平衡的问题.

    如果您有足够的备用容量,最简单的解决方案是将您的投票保留在数据库中,并始终在页面加载期间查找它们.当然,这里没有缓存.

    另一种低延迟(但成本高)的解决方案是使用pub-sub类型系统,即可在运行中向所有其他缓存发布投票.除了高成本之外,您还需要处理各种同步问题.

    下一个选择是拥有共享缓存(例如,memcached,但在不同的机器上共享).对数据库的更新将始终更新缓存.这减少了数据库的负载,并且可以降低延迟响应(因为缓存查找通常比对关系数据库的查询便宜).但是,如果这样做,您将需要仔细调整缓存大小,并具有足够的冗余,以使共享缓存不是单点故障.

    另一种更常用的替代方法是进行某种背景投票聚合,其中投票仅作为每个前端服务器上的事务存储,并且您有一个后台进程,连续(例如,每五秒)聚合一次投票并填充所有缓存.

AFAIK,reddit不进行实时低延迟投票传播.如果您投票,则不会立即反映在其他客户端上.我的猜测是他们正在进行某种聚合(如#4),但这只是我的推测.

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有