【问题标题】:How do you work with Cache?您如何使用缓存?
【发布时间】:2011-06-29 23:25:11
【问题描述】:

我目前正在开发一个负载很重的网站,并且有一定的数据量。

超过 40000 篇文章,300,000 cmets,3,000,000 票。

有些数据需要是实时的,比如article'votes,article's cmets,而另一些可能是延迟的,比如每周热门文章(基于投票),或者主页上的最新文章。

我正在使用 Doctrine 2,可以设置缓存驱动程序,但是基本配置将适用于所有数据,例如生命周期。

那么我的问题是首先,你在哪里设置缓存?

我正在使用类似 SOA 的应用程序,然后我有一个 ArticleController、一个 ArticleService 和一个 ArticleRepository。

其次,我是否需要根据实时约束和估计的流量/更新频率为每个数据手动设置?

谢谢。

【问题讨论】:

    标签: php zend-framework caching memcached doctrine-orm


    【解决方案1】:

    您可以在 application.ini 或 Bootstrap.php 中设置缓存。我认为 application.ini 更容易。

    在 ZF 中,您可以从几个缓存前端(存储什么)和后端(如何存储)数据中进行选择。通常,在一个 ZF Web 应用程序中,您会混合使用它们(尤其是前端),因为它们具有不同的属性或用途。例如,可用于缓存配置文件的文件前端,在修改配置文件时会自动清除。因此,决定缓存的内容和方式、何时清除缓存等是设计过程的一部分。

    【讨论】:

    • 感谢您的回答,但是假设我的学说存储库中有一个 getLatestArticles() 方法,我应该在结果的低级别实现缓存方法吗?我应该为我缓存的每个结果手动设置生命周期吗?
    • @JohnT。我看不出您不能在 getLatestArticles() 中执行此操作的原因。此外,您还可以缓存负责呈现 latestArticles 的视图部分。通常你可以为每个缓存设置一个过期时间。如果您不想,则不需要为缓存中的每个项目存储设置它。
    • 好的,谢谢,那么我计划使用 APC 和 Memcached 作为后端和每个前端,以存储易失性和长期存在的数据。这似乎是正确的做法吗?
    • 关于视图,我看不出缓存它的意义,我的意思是是的,但最复杂和性能损失仍然是数据库查询。
    【解决方案2】:

    Bootstrap.php 是设置缓存并注册它们的地方。看来您需要将缓存文章、cmets 和投票分开。然后,每个缓存都可以为视图和数据库查询拥有自己的重新加载超时。祝你好运并阅读Zend_Cache

    【讨论】:

      【解决方案3】:

      如果您将 Zend_Cache 添加到 application.ini 或 bootstrap.php,您的意图是缓存整个网站以及所有 HTML 页面。不过,您可以以多种不同的方式使用 Zend_Cache。您可以使用它来捕获数据库查询等等。我在一个动作控制器中设置了 Zend_Cache,并且可以成功地为该特定动作捕获整个 HTML 页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-14
        • 2019-03-15
        • 2010-12-02
        • 2015-03-14
        • 1970-01-01
        • 2018-09-18
        • 2020-03-04
        相关资源
        最近更新 更多