8

我最近编写了我的第一个 Symfony2 应用程序,一切都很好,除了现在我想添加一些查询缓存以提高性能并减少不需要的查询。我已将以下几行添加到一个特定查询的构建器中:

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

在第一次请求之后,缓存会按预期使用。我可以在分析器中验证这一点。一切都很棒!

问题是我还编写了一个简单的管理面板,允许用户修改内容,但更改后缓存的版本仍在使用中。

有没有办法我可以“以编程方式”告诉 Symfony2 / Doctrine 在我更新数据时清除查询缓存,或者有没有办法配置它?

这似乎是一个常见问题,但我在 Google 上找不到与该问题相关的任何内容!

4

1 回答 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

于 2013-03-21T23:36:09.297 回答