Stack Overflow 是如何实现缓存的?

Posted

技术标签:

【中文标题】Stack Overflow 是如何实现缓存的?【英文标题】:How Stack Overflow has implemented caching? 【发布时间】:2016-06-11 06:26:09 【问题描述】:

不确定 Stack Overflow 是否使用缓存来提高其页面的加载速度,但如果有,它做得很好。有许多组件需要更新。在这张图片中,你看到每一秒都有许多组件需要更新。 Stack Overflow 是如何做到如此完美的?

【问题讨论】:

从浏览 StackExchange 网站时偶尔出现的问题,我可以说 StackExchange 使用 CloudFlare 来“加速”(缓存)网站的部分(全部?)以获得更好的体验。 这是Meta Stack Overflow 的问题吗? 【参考方案1】:

这个answer 在 Meta.SE 上得到了更全面的回答。然而,重点是:

基本上所有内容都会被缓存,尤其是所有提供给匿名用户的内容。 They use Redis servers with 96 GB of Ram。此服务器保留最近设置和读取值的“L1 缓存”。这些值在发送到 Redis 之前会被压缩。他们还使用 IIS 的 Output Caching 每个站点都有 3 种类型的缓存: “本地”(用户会话、查看次数等) “网站”(热门问题 ID、用户接受率) “全局”(用户收件箱、API 配额)

High Scalability 上还有更多详细信息,尽管此时它已经有将近 5 年的历史了。有一个newer article(从 2014 年开始)提到还涉及两个额外的缓存级别:

SQL Server(整个数据库位于内存中)。截至 2013 年,database servers had 384 GB of memory SSD(仅在 SQL Server 缓存预热时才使用……我认为这不是“缓存”,但文章中提到了)。

【讨论】:

以上是关于Stack Overflow 是如何实现缓存的?的主要内容,如果未能解决你的问题,请参考以下文章

需要在 HTML webview 中显示文本格式的数据,如 Stack Overflow

如何实现类似 Stack Overflow 的搜索

如何实现类似于 Stack Overflow 上的“相关问题”功能?

关于实现 Stack Overflow 风格注释的想法

如何在 Java 中重现 EXCEPTION_STACK_OVERFLOW 错误

Stack Overflow 2017 开发者调查报告