我使用Symfony \ Component \ Cache \ Simple \ FilesystemCache;
当我$ cache-> set $ cache-> get $ cache-> clear()等时有效 我不想使用自定义的ttl。我想清除仅通过控制台设置的缓存。
但是当我执行php bin / console cache:clear时,它并不会清除我之前使用FilesystemCache设置的缓存。
我试图用控制台清除每个池,但也不能清除$ cache。
答案 0 :(得分:0)
终于可以使用AdapterInterface了
<?php
namespace Gh\GhBundle\Manager;
use Symfony\Component\Cache\Adapter\AdapterInterface;
class AppManager
{
protected $_rootDir;
protected $_cache;
public function __construct($rootDir, AdapterInterface $cache)
{
$this->_rootDir = $rootDir;
$this->_cache = $cache;
}
/**
*
* Get version of this app
* @return string
*/
public function getVersion()
{
$cache = $this->_cache;
$numVersion = $cache->getItem('stats.num_version');
if (!$numVersion->isHit()) {
$version = !file_exists($this->_rootDir . '/RELEASE.TXT') ? 'dev' : file_get_contents($this->_rootDir . '/RELEASE.TXT');
$numVersion->set($version);
$cache->save($numVersion);
}
return $numVersion->get();
}
/**
*
* Get name of this app
* @return string
*/
public function getName()
{
return 'GH';
}
}
答案 1 :(得分:0)
Symfony的bin/console cache:clear
命令仅从内核缓存目录中清除缓存,该目录默认为var/cache/{env}
。
创建FilesystemCache实例时,可以提供要将缓存存储为第3个参数的路径。这是FilesystemCache构造函数的签名
public function __construct(string $namespace = '', int $defaultLifetime = 0, string $directory = null)
如果不提供第三个参数,它将以sys_get_temp_dir().'/symfony-cache'
结尾,在Linux上为/tmp/symfony-cache
。
如您所见,它是一个不同的目录,不会被cache:clear
命令清除。
您需要创建自己的data-cache:clear
命令。非常简单https://symfony.com/doc/current/console.html
在命令的execute()
方法中,应实例化FilesystemCache并对其调用clear()
。示例:
protected function execute(InputInterface $input, OutputInterface $output)
{
$cache = new FilesystemCache();
$cache->clear();
}
然后,您可以从控制台调用php bin/console data-cache:clear
。
如果您决定将来再切换到其他缓存引擎(Redis,Memcached等),则只需调整该命令即可清除该缓存。
仅当您继续使用FilesystemCache而不能使用时,它将起作用 提供对实际清除的缓存的细粒度控制。
您可以通过在实例化时将第三个参数传递给FilesystemCache来将缓存存储在kernel.cache_dir
中。
示例:
$cache = new FilesystemCache('', 0, $container->getParameter('kernel.cache_dir').'/data-cache');
或配置为服务时
Symfony\Component\Cache\Simple\FilesystemCache:
arguments:
- ''
- 0
- '%kernel.cache_dir%/data-cache'
这样,Symfony的cache:clear
命令将为您工作,但是将这两种类型的缓存存储在同一位置并不是一个好主意。
如果更改某些项目文件,则可能只希望清除
/var/cache
中的内核缓存,同时保持数据缓存完整,并且 反之亦然。这就是为什么我建议不要使用此解决方案!