如何通过标签清除Symfony apcu缓存

时间:2017-12-19 10:41:03

标签: php symfony caching apc

我设置缓存项目,这很有效

id.longValue()

但是按标记清除缓存不起作用(Symfony cache component - Cache Invalidation

$cache = new ApcuAdapter('my_namespace', 3600, '2');
$cacheItem = $cache->getItem('cache_item_id');
if (!$cacheItem->isHit()) {
    $cacheData = $someClass->getDataForCache();
    $cacheItem->set($cacheData);
    $cacheItem->tag('test_tag');
    $cache->save($cacheItem);
}

那是

$cache = new TagAwareAdapter(new ApcuAdapter('cache_item_id'));
$invalidate = $cache->invalidateTags(['test_tag']); // true

我做错了什么?

1 个答案:

答案 0 :(得分:0)

ApcuAdapterTagAwareAdapter打包在一起时,您将命名空间设置为与原始设置不同的命名空间(“cache_item_id”)(“my_namespace”< / em>的)。这会导致不同名称空间中的标记失效。

此外,更重要的是,您需要使用标签识别适配器保存项目。

$cache = new \Symfony\Component\Cache\Adapter\ApcuAdapter('my_namespace');
$tagAwareCache = new \Symfony\Component\Cache\Adapter\TagAwareAdapter($cache);

$cacheItem = $tagAwareCache->getItem('cache_item_id');

if (!$cacheItem->isHit()) {
    $cacheItem->set($someClass->getDataForCache());
    $cacheItem->tag('test_tag');
    $tagAwareCache->save($cacheItem);
}

$cacheItem = $tagAwareCache->getItem('cache_item_id');

var_dump($cacheItem->isHit()); // true

$tagAwareCache->invalidateTags(['test_tag']);

$cacheItem = $tagAwareCache->getItem('cache_item_id');

var_dump($cacheItem->isHit()); // false