Php 是否根据Symfony 3.2中的config.yml使用TagAwareAdapter?
我知道我可以在Symfony 3.2中定义缓存,就像在我的config.yml中一样: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
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