缓存数百万个网页的最佳方法

问题描述 投票:0回答:1

我正在尝试提出一种简单的解决方案,以对数百万个内容的页面进行为期两周的缓存。每次访问页面时,有问题的站点都会访问MYSQL,某些查询更复杂的页面需要2-3秒的加载时间,我的最终目标是将加载时间缩短到一秒钟以下。我当时正在考虑使用Memcached,但如果可能的话,我想避免这种方法。我基本上希望使用一种解决方案,该方案可爬网所有有问题的页面并每两周自动创建一个新的缓存。我愿意接受所有方法,包括使用服务。

caching memcached varnish
1个回答
0
投票

Memcached或Redis是存储“计划的数据格式”的完美可行的解决方案,在MySQL中将需要大量JOINGROUP BYORDER BY

但是,即使访问诸如Memcached或Redis之类的缓存,仍必须访问代码。在大规模情况下,对于大量数据,PHP运行时和Web服务器可能会成为瓶颈。

清漆救援

您确实提到了术语pages,这意味着您实际上是在尝试缓存整个页面,而不仅仅是数据集。在这种情况下,我建议您看看Varnish

Varnish是一个反向缓存代理,其目的是为了大规模缓存页面。您可以使用搜寻器来预热缓存,还可以利用Cache-Control标头控制缓存中对象的生存时间

这里是将HTTP响应的TTL设置为2周的示例:

Cache-Control: public, s-maxage=1209600

您还可以将TTL设置得更高,然后通过purging将特定对象无效。

缓存数百万个对象

Varnish完全能够缓存数百万个对象,甚至数十亿个对象。可行性主要取决于HTTP响应的大小以及系统拥有的内存量。

默认情况下,Varnish将其对象存储在内存中。 Varnish中的可配置参数是分配的内存量。您可以轻松地将系统内存的80%分配给Varnish进程。每个对象中将对象存储在缓存中的开销仅为1 KB

如果您缓存的对象只是纯文本,应该没有问题。如果它是二进制数据(例如:图像),则可能会很快耗尽内存。

用尽内存不会造成灾难性的影响:LRU机制将确保在缓存已满时,将删除[[最近最少使用的]]对象以清除空间。结论

Varnish已成为页面缓存的

事实标准。 user guide on the website是快速学习如何设置和配置Varnish的重要资源。

© www.soinside.com 2019 - 2024. All rights reserved.