在Symfony2/Doctrine中清除查询缓存

8

最近我写了我的第一个Symfony2应用程序,一切正常,但现在我想添加一些查询缓存以提高性能并减少不必要的查询。我已经将下面这行代码添加到一个特定查询的构建器中:

$query->useResultCache(true)
      ->useQueryCache(true);

在第一次请求之后,缓存能够按预期使用。我可以在分析器中验证这一点。一切都很好!
问题是,我还写了一个简单的管理面板,允许用户修改内容,但是修改后缓存的版本仍然被使用。
有没有办法通过编程来告诉Symfony2 / Doctrine在更新数据时清除查询缓存?或者有没有一种配置方式?
似乎这是一个常见的问题,但我在谷歌上找不到任何相关的信息!

请问您能否告诉我如何使用分析器检查缓存是否正常工作,特别是使用分析器的方法。我尝试检查数据库查询的数量,但由于在缓存执行前后每次都得到相同数量的查询,所以我不知道它是否正在工作或者是否应该这样做,有什么提示吗? - Scaramouche
1个回答

30

我建议使用结果缓存ID - 这样您就可以清除特定的结果缓存:

$query->setResultCacheId('my_custom_id');
// or shorter notation with lifetime option
$query->useResultCache(true, 3600, 'my_custom_id');

// to delete cache
$cacheDriver = $entityManager->getConfiguration()->getResultCacheImpl();
$cacheDriver->delete('my_custom_id');
// to delete all cache entries
$cacheDriver->deleteAll();

了解更多有关缓存删除的信息,请参见:
http://docs.doctrine-project.org/en/latest/reference/caching.html#deleting


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接