Edit on GitHub

Custom Cache Pools

Pimcore uses a custom PSR-6 implementation which is targeted to the heavy use of cache tagging used in core caching. Therefore a cache pool utilized by the CoreHandlerInterface needs to implement both PSR-6 and php-cache/tag-interop. If implementing custom pools please make sure tags and items are written in a transactional way.

Pimcore ships with an adapter for Symfony's Cache Component which you can use to get started quickly with a whole range of cache implementations. As example, see how the predefined filesystem adapter which is used as fallback is defined:

# pimcore/lib/Pimcore/Bundle/CoreBundle/Resources/config/cache.yml
services:
    # symfony filesystem cache adapter
    pimcore.cache.core.symfony_adapter.filesystem:
        class: Symfony\Component\Cache\Adapter\FilesystemAdapter
        arguments:
            - 'pimcore'
            - '%pimcore.cache.core.default_lifetime%'
            - '%kernel.cache_dir%/pimcore'
        calls:
            - [setLogger, ['@logger']]
        tags:
            - { name: monolog.logger, channel: cache }


    # filesystem cache pool using the symfony adapter
    # if the symfony adapter is no TagAwareAdapter, it will be automatically wrapped
    pimcore.cache.core.pool.filesystem:
        class: Pimcore\Cache\Pool\SymfonyAdapterProxy
        arguments:
            - '@pimcore.cache.core.symfony_adapter.filesystem'
            - '%pimcore.cache.core.default_lifetime%'
        calls:
            - [setLogger, ['@logger']]
        tags:
            - { name: monolog.logger, channel: cache }

If you want to start with a completely custom implementation, please see the following files as reference:

To use your custom pool, register it as service and update the configuration to use the custom pool:

# services.yml
services:
    app.cache.custom_pool:
        class: AppBundle\Cache\CustomCachePool
# config.yml
pimcore:
    cache:
        pool_service_id: app.cache.custom_pool