我设置缓存项目,这很有效
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
我做错了什么?
答案 0 :(得分:0)
将ApcuAdapter
与TagAwareAdapter
打包在一起时,您将命名空间设置为与原始设置不同的命名空间(“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