我们有一个基于Symfony 3.2(当时从Symfony 2.3开始)和Doctrine ORM 2.5的正在运行的应用程序,事情的发展非常棒。
我读了很多关于新的Symfony缓存组件,APC和APCU的优势和不足,opcache,在Symfony中为缓存提出请求等内容...但说实话这一次你让我有些摸不着头脑。
所以我恳请是否可以有人在以下两个方面支持我:1)理解和2)在生产环境中实现"标准"Symfony / Doctrine应用程序的缓存。
前提/假设
1)opcache应该启用并激活,并且缓存任何与字节码相关的内容。
2)我目前没有任何需要缓存自己应用程序的要求。这全部都是关于框架缓存,例如注释、类映射、验证、ORM元数据等。
3)大多数开发人员不想处理超过一个缓存提供程序,无论是APCu、xcache、redis、memcache还是其他任何东西。可能有非常好的理由为不同的任务使用不同的缓存提供程序,但让我们坚持只使用一个以保持简单。
"标准"Symfony / Doctrine应用程序在生产模式下的缓存选项
1)类加载
我们仍然在app.php
中使用ApcClassLoader:
$loader = require __DIR__ . '/../app/autoload.php';
include_once __DIR__ . '/../var/bootstrap.php.cache';
$apcLoader = new ApcClassLoader('arcsf2', $loader);
$apcLoader->register(true);
$loader->unregister();
require_once __DIR__ . '/../app/AppCache.php';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
$kernel = new AppCache($kernel);
据我所知,Symfony仅提供了两种选项:ApcClassLoader和XcacheClassLoader。因此,这可能会与上面的假设2产生矛盾。
问题:
现在是否仍然需要/必需/表现显著更好地使用这些缓存ClassLoader?
还是现在使用标准的app.php已足够?
$loader = require __DIR__.'/../app/autoload.php';
include_once __DIR__.'/../var/bootstrap.php.cache';
$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
2) 验证缓存
我们仍然在我们的 config_prod.yml
文件中保留了这个:
framework:
validation:
cache: validator.mapping.cache.doctrine.apc
问题:
说实话,我不知道在Symfony 3.2和新的缓存组件中是否仍然有效。如果需要,我该如何将其更改为不同的缓存提供程序?如何使其适应Symfony 3.2 Cache的最新版本?
3)Doctrine缓存:
对于config_prod.yml
中的doctrine orm部分,几乎可以应用同样的问题:
doctrine:
orm:
metadata_cache_driver: apc
result_cache_driver: apc
query_cache_driver: apc
< p >< em >问题:这还是现在应该使用的方式吗?如何改变这个方式,使用新的Symfony缓存组件 - 无论如何都可以吗?
4) 新选项?
如何处理config_prod.yml
中的新选项?
framework:
cache:
app: cache.adapter.someProviderOrPool
system: cache.adapter.someProviderOrPool
问题:
这里缓存了什么样的信息,由谁缓存的,它是否在某种程度上替代或扩展了上述某些主题?
总之:
我想基本上更改所有我的生产配置,以符合Symfony 3.2,并且我想在尽可能多的地方使用Redis进行缓存(替换APC),但我完全不知道如何开始和从哪里开始。
****编辑****
在这种情况下,Symfony Cache组件和DoctrineCacheBundle如何配合?替换?添加?构建?共同工作?冲突?不可比较?