自动重建缓存

时间:2011-07-06 12:33:23

标签: performance caching optimization symfony1 doctrine

我运行一个包含大量数据的Symfony 1.4项目。主页面和类别页面使用寻呼机,需要知道可用的行数。我正在传递一个查询,其中包含到寻呼机的连接,导致这些页面上的加载时间为1分钟。

我为各个操作配置了cache.yml。但我认为解决方法是不够的,这是我的假设:

Symfony在用户进行的单个请求中重建缓存。让我们称这个用户为“缓存受害者”来简化事情。

在我们的案例中,数据需要更新 - 10分钟的生命周期就足够了。显然,如果没有用户愿意成为“缓存受害者”并且因此只是取消请求,则不会重建缓存。这些假设是否正确?

所以,我提出了这个想法: Symfony应该在重建缓存后伪造http请求。新缓存条目应写在临时文件/目录中,并且一旦缓存重建完成,就应与先前的缓存条目交换。

这可能吗?

在我看来,这类似于双缓冲的概念。

如果多人游戏中有一个“gpu-victim”看到屏幕逐行建立,那不是很愚蠢吗? (这是一个不平衡的比较,我知道......;))

修改

没有“缓存受害者” - 每10分钟页面重新加载每个用户需要1分钟。

2 个答案:

答案 0 :(得分:0)

我认为您的问题是由于某些索引缺失或错误造成的。我有一个大型足球网站的sf1.4项目(即2M页/天),即使我们的数据库目前有超过1M行,寻呼机也不会那么慢。使用EXPLAIN查看您的查询并检查它在哪里变坏...

答案 1 :(得分:0)

对不起有问题(有徽章吗?)。 通过配置cache.yml,您只需缓存应用程序的视图层(即css,js和html)以获取没有参数的REQUESTS。浏览寻呼机显然在GET请求上有一个?page = X.

取自symfony 1.4 config.yml文档:

  

无论配置如何,symfony都不会缓存查询字符串中带有GET参数或使用POST,PUT或DELETE方法提交的传入请求。 http://www.symfony-project.org/reference/1_4/en/09-Cache

可能对您有所帮助的是缓存数据库结果,但这对symfony / doctrine来说是一个痛苦的过程。参考: http://www.symfony-project.org/more-with-symfony/1_4/en/08-Advanced-Doctrine-Usage#chapter_08_using_doctrine_result_caching

编辑: 这也可能对你有所帮助: http://www.zalas.eu/symfony-meets-apc-alternative-php-cache