【问题标题】:How to handle Caching for huge pages using Smarty 3如何使用 Smarty 3 处理大页面的缓存
【发布时间】:2012-02-07 16:05:59
【问题描述】:

我目前正在运行一个拥有数百万个动态页面的项目。这些页面的内容是从数据库中收集的,当然数据库也很大,有很多表。由于这些数据库内容不会经常更改,并且为了减少 MySQL 连接和查询对服务器的不必要负担,我实施了 Smarty 缓存,持续时间为 7 天或一个月,具体取决于内容类型。

现在,我的问题是我的单个缓存目录中有大量缓存页面,我不知何故开始认为这可能会降低整体性能。

那么,谁能告诉我在单个目录上拥有数百万个缓存页面的性能问题?或者,我如何管理存储这些缓存文件?或者,如何正确使用 Smarty Caching 处理大量页面?

【问题讨论】:

    标签: php mysql caching filesystems smarty3


    【解决方案1】:

    将您的动态页面 HTML 内容直接提供给用户。 你可以用不同的方式做到这一点。 有太多方法可以做到这一点,但你有数百万页然后应用这个过程。

    1. 当任何用户首先访问时,检查该页面是否存在缓存
    2. 如果没有,则缓存生成并提供页面
    3. 基本缓存文件到期,您可以再次重新生成该缓存文件。

    我可以建议您使用的基础库是 PEAR cacheLiet,或者这很简单,您可以编写自己的代码。但是使用 PEAR cacheLite 的好处是它有许多驱动程序,如文件、数据库和其他缓存系统。

    对于缓存目录,您可以根据您的网站类别或您网站所拥有的标签使用不同的文件。

    【讨论】:

    • 我已经使用 Smarty Caching 实现了所有建议的列表。我想知道在单个目录中有数百万个缓存页面时的任何性能问题,或者在使用 Smarty 3 时是否有更好的解决方案。
    【解决方案2】:

    您可能需要考虑使用 Varnish 作为反向代理缓存。它非常适合缓存大量静态页面。

    【讨论】:

      【解决方案3】:

      我发现将所有缓存文件放在单个目录中不会产生任何性能问题,除非我们要循环读取文件。

      但是,最新版本的 smarty(在撰写此答案时为 3.1.13)存在问题(请参阅smarty forum 上的讨论)。在清除特定缓存 id 或组的缓存时,smarty 会逐一读取所有文件,这需要一些时间才能删除单个缓存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 2017-02-13
        相关资源
        最近更新 更多