Configuration
Caches are configured in the array
$GLOBALS
. The basic structure is
predefined in EXT:core/Configuration/DefaultConfiguration.php (GitHub), and consists
of the single section:
cache
Configurations - Registry of all configured caches. Each cache is identified by its array
key. Each cache can have the sub-keys
frontend
,backend
andoptions
to configure the used frontend, backend and possible backend options.
Cache configurations
Unfortunately in TYPO3, all ext_
files of the extensions
are loaded after the instance-specific configuration from
config/
and config/
.
This enables extensions to overwrite cache configurations already done for the
instance. All extensions should avoid this situation and should define the very
bare minimum of cache configurations. This boils down to define the array key to
populate a new cache to the system. Without further configuration, the cache
system falls back to the default backend and default frontend settings:
<?php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['myext_mycache']
??= [];
Extensions, like Extbase, define default caches this way, giving administrators full freedom for specific and possibly quicker setups (for example, a memory-driven cache for the Extbase reflection cache).
Administrators can overwrite specific settings of the cache configuration in
config/
or config/
. Here
is an example configuration to switch pages to the Redis backend using
database 3:
<?php
use TYPO3\CMS\Core\Cache\Backend\RedisBackend;
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
'backend' => RedisBackend::class,
'options' => [
'database' => 3,
],
];
Some backends have mandatory as well as optional parameters (which are documented in the Cache backends section). If not all mandatory options are defined, the specific backend will throw an exception, if accessed.
How to disable specific caches
During development it can be convenient to disable certain caches. This is especially helpful for central caches like the language or autoloader cache. This can be achieved by using the null backend as storage backend.
Warning
Do not use this in production, it will slow the system down considerably!
Example configuration to switch the extbase_reflection cache to use the null backend: