我知道我可以像在我的config.yml中那样在Symfony 3.2中定义一个缓存:
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
E.g。在我的控制器中我可以简单地使用
$cache = $this->get('my_redis_cache');
现在,从Symfony 3.2开始,我们有了一个名为TagAwareAdapter的奇妙新功能 - 它允许通过标签进行缓存失效。
这是通过以下代码完成的:
$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
但我不知道如何定义它 - 我正在玩试试&从现在开始有一段时间的错误 - 到目前为止,我得到的只是错误。
答案 0 :(得分:4)
上面的答案提供了 解决方案 ,它是一个很好的答案,我只是把它们放在一起作为答案,因为我也浪费了一些时间来了解如何使用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
<强> services.yml 强>:
myapp.cache:
public: true
class: Symfony\Component\Cache\Adapter\TagAwareAdapter
arguments: [ '@app.cache.file', '@app.cache.redis' ]
使用它(例如在Controller中):
/** @var TagAwareAdapterInterface $cache */
$cache = $this->get('myapp.cache');
不要忘记安装redis实例并安装redis软件包:
composer require predis/predis
答案 1 :(得分:3)
愚蠢的我。我可以通过在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缓存。
还是有其他/更好的方法来实现这个目标吗?