Symfony 部署后清除缓存组件
Posted
技术标签:
【中文标题】Symfony 部署后清除缓存组件【英文标题】:Symfony clear cache component after deploy 【发布时间】:2017-05-31 12:25:45 【问题描述】:您好,有没有办法从 symfony 缓存组件中清除所有缓存数据?
这里底部的http://symfony.com/doc/current/components/cache/cache_pools.html 是:(我需要控制台命令)
$cacheIsEmpty = $cache->clear();
和命令:
bin/console cache:clear
保持缓存不变
我正在寻找控制台命令,我可以在每次部署时调用 *.sh 脚本。
编辑(示例):
默认输入选项:
$cache = new FilesystemAdapter();
$defaultInputOptions = $cache->getItem('mainFilter.defaultInputOptions');
if (!$defaultInputOptions->isHit())
// collect data, format etc.
$expiration = new \DateInterval('P1D');
$defaultInputOptions->expiresAfter($expiration);
$cache->save($defaultInputOptions);
else
return $defaultInputOptions->get();
但如果我在“收集数据、格式等”中进行更改。在我的机器上然后进行部署(git pull、composer install、bin/console cache:clear...)然后服务器上的新版本仍然有有效的缓存(1天)并从中获取数据...
【问题讨论】:
为什么 ./bin/console cache:clear 还不够? 有问题的是更新 - 示例和解释。 【参考方案1】:你可以让任何你想要的服务实现 Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface
被 symfony native cache:clear
use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
use Symfony\Component\Cache\Adapter\AdapterInterface;
final class SomeCacheClearer implements CacheClearerInterface
private $cache;
public function __construct(AdapterInterface $filesystemAdapter)
$this->cache = $filesystemAdapter;
public function clear($cacheDir)
$this->cache->clear();
配置由标签 kernel.cache_clearer
完成cache_provider.clearer:
class: AppBundle\Path\SomeCacheClearer
arguments:
- 'my_app_cache'
tags:
- name: kernel.cache_clearer
编辑:关于缓存即服务的精度:
你的缓存服务可以这样定义
my_app_cache:
class: Symfony\Component\Cache\Adapter\FilesystemAdapter
或者如果你想指定一个命名空间和 ttl
my_app_cache:
class: Symfony\Component\Cache\Adapter\FilesystemAdapter
arguments:
- 'my_cache_namespace'
- 30 #cache ttl (in seconds)
所以你应该不使用
$cache = new FilesystemAdapter();
但是使用服务注入
$cache = $this->get('my_app_cache');
【讨论】:
您好,谢谢回答。我必须添加use Symfony\Component\Cache\Adapter\AdapterInterface;
并在参数中给出@cache.app
。但它不起作用 - 没有错误,在 bin/console cache:clear
之后仍然从有效缓存中加载数据
如果在方法 clear() 中放置断点或var_dump("called");exit;
,它会被调用吗?
在控制台中我看到'调用'所以是的
好的,谢谢。它在 service.yaml 中没有任何参数即可工作。【参考方案2】:
最后 - 只需编辑 services.yml
并添加:
appbundle.cachecomponent.clearall:
class: Symfony\Component\Cache\Adapter\FilesystemAdapter
tags:
- name: kernel.cache_clearer
我是 symfony 的新手,所以我希望这是正确的解决方案。
【讨论】:
以上是关于Symfony 部署后清除缓存组件的主要内容,如果未能解决你的问题,请参考以下文章