Php 是否根据Symfony 3.2中的config.yml使用TagAwareAdapter?

Php 是否根据Symfony 3.2中的config.yml使用TagAwareAdapter?,php,symfony,Php,Symfony,我知道我可以在Symfony 3.2中定义缓存,就像在我的config.yml中一样: cache: default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port% pools: my_redis_cache: adapter: cache.adapter.redis public: true def

我知道我可以在Symfony 3.2中定义缓存,就像在我的config.yml中一样:

    cache:
    default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port%
    pools:
        my_redis_cache:
            adapter: cache.adapter.redis
            public: true
            default_lifetime: 1200
            provider: cache.default_redis_provider
例如,在我的控制器中,我可以简单地使用

$cache = $this->get('my_redis_cache');
自Symfony 3.2以来,我们有了一个奇妙的新功能,名为-它允许通过标记使缓存失效

这是通过以下方式在代码中完成的:

$cache = new TagAwareAdapter(
// Adapter for cached items
new FilesystemAdapter(),
// Adapter for tags
new RedisAdapter('redis://localhost')
);
但是我可以在config.yml中定义它吗

我正在寻找类似于:

    cache:
    default_redis_provider: redis://%redis_password%@%redis_host%:%redis_port%
    pools:
        my_redis_cache:
            adapter: cache.adapter.redis
            public: true
            default_lifetime: 1200
            provider: cache.default_redis_provider
        my_tag_aware_cache:
            adapter: cache.adapter.tagawareadapter
            provider:
                - my_file_cache
                - my_redis_cache

但我不知道如何定义它——我从一段时间以来一直在玩try&error游戏——到目前为止,我得到的只是错误。

愚蠢的我。我可以通过在
services.yml
中定义一个简单的服务来实现:

    my_tag_aware_cache:
        class: Symfony\Component\Cache\Adapter\TagAwareAdapter
        arguments: [ '@my_file_cache', '@my_redis_cache' ]
现在,我在控制器中使用

$cache = $this->get('my_tag_aware_cache');
这是一个TagAware缓存


或者有其他/更好的方法来实现这一点吗?

上面的答案提供了解决方案,这是一个很好的解决方案,我将把它们放在一起作为一个答案,因为我还浪费了一些时间来了解如何使用TagAwareAdapter。这是我针对Symfony 3.4的解决方案

config.yml

cache:
    pools:
        app.cache.file:
            public: true
            adapter: cache.adapter.filesystem
        app.cache.redis:
            public: true
            adapter: cache.adapter.redis
服务。yml

myapp.cache:
    public: true
    class: Symfony\Component\Cache\Adapter\TagAwareAdapter
    arguments: [ '@app.cache.file', '@app.cache.redis' ]
用户可以这样使用它(如在控制器中):

别忘了准备一个redis实例并安装redis软件包:

composer require predis/predis

您知道是否存在仅配置的解决方案吗?我觉得有点奇怪,
CacheItem
确实允许设置标记,但标记只有在使用
TagAwareAdapter
时才起作用。必须手动创建一个
TagAwareAdapter
。对不起,请不要完全理解您的问题,我的解决方案是“仅配置”,如果您的意思是没有新的。。。代码中的语句
composer require predis/predis