我在4个heroku dynos上运行symfony应用程序,我想使用apc_cache。
我在网上找到了一个清除apc_cache的技巧,需要向一个(临时)公开的php文件发出请求,清除apc_cache。我不明白这对于多个dynos是如何可靠地工作的,因为任何一个请求总是只被路由到一个dynos。这是一个问题,因为我的服务器监控工具表明应用程序在部署期间暂时缩小为一个dyno,以便在部署完成时进行扩展。
可能以下问题应该是一个问题,但我计划在不久的将来将应用程序迁移到Amazon EC2,并使用Codeship,Docker和AWS Elastic Beanstalk(EB)自动部署。对于在自动缩放组中使用Amazon EC2实例的问题,是否有更直接的解决方案?
答案 0 :(得分:0)
使用APC缓存自动加载器(在Symfony文档中找到)
Symfony带有一个类 - ApcClassLoader - 就是这样做的。要使用它,只需调整前端控制器文件即可。如果您正在使用标准分配,则此代码应该已作为此文件中的注释提供:
// app.php
// ...
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
// Use APC for autoloading to improve performance
// Change 'sf2' by the prefix you want in order
// to prevent key conflict with another application
/*
$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);
*/
// ...
注意:使用APC自动加载器时,如果添加新类,它们将自动找到,一切都将像以前一样工作(即没有理由"清除"缓存)。但是,如果更改特定命名空间或前缀的位置,则需要刷新APC缓存。否则,自动加载器仍将查看该命名空间内所有类的旧位置。
您可以使用此捆绑包https://github.com/ornicar/ApcBundle或https://github.com/Smart-Core/AcceleratorCacheBundle并将命令添加到post-install-cmd
清除所有APC缓存(操作码+用户):
$ php app/console apc:clear
或者如果你使用Capifony:
after "deploy", "symfony:clear_accelerator_cache"
after "deploy:rollback:cleanup", "symfony:clear_accelerator_cache"
已编辑:
但是,APC的对象缓存仅存储有关本地实例的信息,因此一旦你有多个dynos(实例),他们就不会共享缓存。
为此,您可以考虑 Memcached