gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:47:09 24 4
gpt4 key购买 nike

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

最佳答案

Memcached或Redis是用于存储“投影数据格式”的完美可行的解决方案,在MySQL中,这种格式需要大量的JOINGROUP BYORDER BY

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

抢救 Varnish

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

Varnish是一种反向缓存代理,旨在专门用于大规模缓存页面。您可以使用搜寻器来预热缓存,还可以利用Cache-Control header 控制缓存中对象的生存时间。

这是将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的重要资源。

关于caching - 缓存数百万网页的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60262016/

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