【问题标题】:How to clear Symfony apcu cache by tags如何通过标签清除 Symfony apcu 缓存
【发布时间】:2018-06-01 18:42:15
【问题描述】:

我设置了缓存项,效果很好

$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);
}

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

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

那是

$cacheItem->isHit() // true

我做错了什么?

【问题讨论】:

    标签: php symfony caching apc


    【解决方案1】:

    当用 TagAwareAdapter 包装 ApcuAdapter 时,您将命名空间设置为与最初设置 ("my_namespace") 不同的命名空间 ("cache_item_id") .这会导致不同命名空间中的标签无效。

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

    $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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-23
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      相关资源
      最近更新 更多