[FrameworkBundle] Default to Apcu+Filesystem cache chain
This commit is contained in:
parent
209fb450da
commit
b9b57f93cb
@ -93,25 +93,8 @@ FrameworkBundle
|
|||||||
cache service. If you are using `serializer.mapping.cache.apc`, use
|
cache service. If you are using `serializer.mapping.cache.apc`, use
|
||||||
`serializer.mapping.cache.doctrine.apc` instead.
|
`serializer.mapping.cache.doctrine.apc` instead.
|
||||||
|
|
||||||
* The `framework.serializer.cache` option has been deprecated. Configure the
|
* The `framework.serializer.cache` option has been deprecated. APCu should now
|
||||||
`cache.serializer` service under `framework.cache.pools` instead.
|
be automatically used when available so you can remove this configuration key.
|
||||||
|
|
||||||
Before:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
framework:
|
|
||||||
serializer:
|
|
||||||
cache: serializer.mapping.cache.apc
|
|
||||||
```
|
|
||||||
|
|
||||||
After:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
framework:
|
|
||||||
cache:
|
|
||||||
pools:
|
|
||||||
cache.serializer:
|
|
||||||
adapter: cache.adapter.apcu
|
|
||||||
|
|
||||||
HttpKernel
|
HttpKernel
|
||||||
----------
|
----------
|
||||||
|
@ -80,26 +80,8 @@ FrameworkBundle
|
|||||||
* The service `serializer.mapping.cache.apc` has been removed; use
|
* The service `serializer.mapping.cache.apc` has been removed; use
|
||||||
`serializer.mapping.cache.doctrine.apc` instead.
|
`serializer.mapping.cache.doctrine.apc` instead.
|
||||||
|
|
||||||
* The `framework.serializer.cache` option has been removed. Configure the
|
* The `framework.serializer.cache` option has been removed. APCu should now
|
||||||
`cache.serializer` service under `framework.cache.pools` instead.
|
be automatically used when available so you can remove this configuration key.
|
||||||
|
|
||||||
Before:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
framework:
|
|
||||||
serializer:
|
|
||||||
cache: serializer.mapping.cache.apc
|
|
||||||
```
|
|
||||||
|
|
||||||
After:
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
framework:
|
|
||||||
cache:
|
|
||||||
pools:
|
|
||||||
cache.serializer:
|
|
||||||
adapter: cache.adapter.apcu
|
|
||||||
```
|
|
||||||
|
|
||||||
HttpKernel
|
HttpKernel
|
||||||
----------
|
----------
|
||||||
|
@ -564,7 +564,7 @@ class Configuration implements ConfigurationInterface
|
|||||||
->end()
|
->end()
|
||||||
->scalarNode('system')
|
->scalarNode('system')
|
||||||
->info('System related cache pools configuration')
|
->info('System related cache pools configuration')
|
||||||
->defaultValue('cache.adapter.filesystem')
|
->defaultValue('cache.adapter.system')
|
||||||
->end()
|
->end()
|
||||||
->scalarNode('directory')->defaultValue('%kernel.cache_dir%/pools')->end()
|
->scalarNode('directory')->defaultValue('%kernel.cache_dir%/pools')->end()
|
||||||
->scalarNode('default_doctrine_provider')->end()
|
->scalarNode('default_doctrine_provider')->end()
|
||||||
|
@ -1039,6 +1039,7 @@ class FrameworkExtension extends Extension
|
|||||||
{
|
{
|
||||||
$nonce = substr(str_replace('/', '-', base64_encode(md5(uniqid(mt_rand(), true), true))), 0, -2);
|
$nonce = substr(str_replace('/', '-', base64_encode(md5(uniqid(mt_rand(), true), true))), 0, -2);
|
||||||
$container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $nonce);
|
$container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $nonce);
|
||||||
|
$container->getDefinition('cache.adapter.system')->replaceArgument(2, $nonce);
|
||||||
$container->getDefinition('cache.adapter.filesystem')->replaceArgument(2, $config['directory']);
|
$container->getDefinition('cache.adapter.filesystem')->replaceArgument(2, $config['directory']);
|
||||||
|
|
||||||
foreach (array('doctrine', 'psr6', 'redis') as $name) {
|
foreach (array('doctrine', 'psr6', 'redis') as $name) {
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
<tag name="cache.pool" />
|
<tag name="cache.pool" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="cache.system" parent="cache.adapter.filesystem">
|
<service id="cache.system" parent="cache.adapter.system">
|
||||||
<tag name="cache.pool" />
|
<tag name="cache.pool" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
@ -22,6 +22,17 @@
|
|||||||
<tag name="cache.pool" />
|
<tag name="cache.pool" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service id="cache.adapter.system" class="Symfony\Component\Cache\Adapter\AdapterInterface" abstract="true">
|
||||||
|
<factory class="Symfony\Component\Cache\Adapter\AbstractAdapter" method="createSystemCache" />
|
||||||
|
<tag name="cache.pool" clearer="cache.default_clearer" />
|
||||||
|
<tag name="monolog.logger" channel="cache" />
|
||||||
|
<argument /> <!-- namespace -->
|
||||||
|
<argument /> <!-- default lifetime -->
|
||||||
|
<argument /> <!-- nonce -->
|
||||||
|
<argument>%kernel.cache_dir%/pools</argument>
|
||||||
|
<argument type="service" id="logger" on-invalid="ignore" />
|
||||||
|
</service>
|
||||||
|
|
||||||
<service id="cache.adapter.apcu" class="Symfony\Component\Cache\Adapter\ApcuAdapter" abstract="true">
|
<service id="cache.adapter.apcu" class="Symfony\Component\Cache\Adapter\ApcuAdapter" abstract="true">
|
||||||
<tag name="cache.pool" clearer="cache.default_clearer" />
|
<tag name="cache.pool" clearer="cache.default_clearer" />
|
||||||
<tag name="monolog.logger" channel="cache" />
|
<tag name="monolog.logger" channel="cache" />
|
||||||
|
@ -269,7 +269,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
|
|||||||
'cache' => array(
|
'cache' => array(
|
||||||
'pools' => array(),
|
'pools' => array(),
|
||||||
'app' => 'cache.adapter.filesystem',
|
'app' => 'cache.adapter.filesystem',
|
||||||
'system' => 'cache.adapter.filesystem',
|
'system' => 'cache.adapter.system',
|
||||||
'directory' => '%kernel.cache_dir%/pools',
|
'directory' => '%kernel.cache_dir%/pools',
|
||||||
'default_redis_provider' => 'redis://localhost',
|
'default_redis_provider' => 'redis://localhost',
|
||||||
),
|
),
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Bundle\FrameworkBundle\Tests\DependencyInjection;
|
|||||||
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
|
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
|
||||||
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
|
use Symfony\Bundle\FrameworkBundle\DependencyInjection\FrameworkExtension;
|
||||||
use Symfony\Component\Cache\Adapter\ApcuAdapter;
|
use Symfony\Component\Cache\Adapter\ApcuAdapter;
|
||||||
|
use Symfony\Component\Cache\Adapter\ChainAdapter;
|
||||||
use Symfony\Component\Cache\Adapter\DoctrineAdapter;
|
use Symfony\Component\Cache\Adapter\DoctrineAdapter;
|
||||||
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
use Symfony\Component\Cache\Adapter\FilesystemAdapter;
|
||||||
use Symfony\Component\Cache\Adapter\ProxyAdapter;
|
use Symfony\Component\Cache\Adapter\ProxyAdapter;
|
||||||
@ -728,6 +729,9 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||||||
$this->assertSame(DoctrineAdapter::class, $parentDefinition->getClass());
|
$this->assertSame(DoctrineAdapter::class, $parentDefinition->getClass());
|
||||||
break;
|
break;
|
||||||
case 'cache.app':
|
case 'cache.app':
|
||||||
|
if (ChainAdapter::class === $parentDefinition->getClass()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 'cache.adapter.filesystem':
|
case 'cache.adapter.filesystem':
|
||||||
$this->assertSame(FilesystemAdapter::class, $parentDefinition->getClass());
|
$this->assertSame(FilesystemAdapter::class, $parentDefinition->getClass());
|
||||||
break;
|
break;
|
||||||
|
@ -58,6 +58,7 @@
|
|||||||
"phpdocumentor/reflection-docblock": "<3.0"
|
"phpdocumentor/reflection-docblock": "<3.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
|
"ext-apcu": "For best performance of the system caches",
|
||||||
"symfony/console": "For using the console commands",
|
"symfony/console": "For using the console commands",
|
||||||
"symfony/form": "For using forms",
|
"symfony/form": "For using forms",
|
||||||
"symfony/serializer": "For using the serializer service",
|
"symfony/serializer": "For using the serializer service",
|
||||||
|
@ -14,6 +14,7 @@ namespace Symfony\Component\Cache\Adapter;
|
|||||||
use Psr\Cache\CacheItemInterface;
|
use Psr\Cache\CacheItemInterface;
|
||||||
use Psr\Log\LoggerAwareInterface;
|
use Psr\Log\LoggerAwareInterface;
|
||||||
use Psr\Log\LoggerAwareTrait;
|
use Psr\Log\LoggerAwareTrait;
|
||||||
|
use Psr\Log\LoggerInterface;
|
||||||
use Symfony\Component\Cache\CacheItem;
|
use Symfony\Component\Cache\CacheItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,6 +68,24 @@ abstract class AbstractAdapter implements AdapterInterface, LoggerAwareInterface
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function createSystemCache($namespace, $defaultLifetime, $nonce, $directory, LoggerInterface $logger = null)
|
||||||
|
{
|
||||||
|
$fs = new FilesystemAdapter($namespace, $defaultLifetime, $directory);
|
||||||
|
if (null !== $logger) {
|
||||||
|
$fs->setLogger($logger);
|
||||||
|
}
|
||||||
|
if (!ApcuAdapter::isSupported()) {
|
||||||
|
return $fs;
|
||||||
|
}
|
||||||
|
|
||||||
|
$apcu = new ApcuAdapter($namespace, $defaultLifetime / 5, $nonce);
|
||||||
|
if (null !== $logger) {
|
||||||
|
$apcu->setLogger($logger);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ChainAdapter(array($apcu, $fs));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fetches several cache items.
|
* Fetches several cache items.
|
||||||
*
|
*
|
||||||
|
@ -19,9 +19,14 @@ use Symfony\Component\Cache\Exception\CacheException;
|
|||||||
*/
|
*/
|
||||||
class ApcuAdapter extends AbstractAdapter
|
class ApcuAdapter extends AbstractAdapter
|
||||||
{
|
{
|
||||||
|
public static function isSupported()
|
||||||
|
{
|
||||||
|
return function_exists('apcu_fetch') && ini_get('apc.enabled') && !('cli' === PHP_SAPI && !ini_get('apc.enable_cli'));
|
||||||
|
}
|
||||||
|
|
||||||
public function __construct($namespace = '', $defaultLifetime = 0, $nonce = null)
|
public function __construct($namespace = '', $defaultLifetime = 0, $nonce = null)
|
||||||
{
|
{
|
||||||
if (!function_exists('apcu_fetch') || !ini_get('apc.enabled') || ('cli' === PHP_SAPI && !ini_get('apc.enable_cli'))) {
|
if (!static::isSupported()) {
|
||||||
throw new CacheException('APCu is not enabled');
|
throw new CacheException('APCu is not enabled');
|
||||||
}
|
}
|
||||||
if ('cli' === PHP_SAPI) {
|
if ('cli' === PHP_SAPI) {
|
||||||
|
Reference in New Issue
Block a user