Symfony2/Doctrine2缓存内容以避免查询



背景:我有一个相当大的表(2000行,10列),里面充满了小int(仅0,1,2)。给定一个实体和该实体的一个字段,根据10列的值,如果我想在呈现表单时显示和/或要求该实体的该字段,我将获得信息。每次在表单构建器中添加->时,我都希望将整个表缓存在服务器内存中的"某个地方",而不是查询DB中的每个字段。

我该怎么做?是否有必要让每个用户"加载"表,或者可以为所有用户只加载一次,每个用户只读取服务器的RAM?

那张桌子几乎从不改变。尽管如此,我还是需要能够每隔一段时间上传一个更新版本(很少)。

谢谢!

SN

您所需要做的就是使用useResultCache方法。

Doctrine使用Symfony配置中设置的缓存驱动程序,因此当您编写从表中提取数据的queryBuilder时,只需告诉Doctrine您希望缓存结果(可选的是缓存时间和密钥):

class YourEntityRepository extends EntityRepository
{
public function getAllRowsCached()
{
$cachedResult = $this->createQueryBuilder('e')
->getQuery()
->useResultCache(true, 3600, 'cache_key')
->getArrayResult();
return $cachedResult;
}
}

缓存对所有用户来说都是通用的,所以第一个用户将查询数据库,第二个用户将使用缓存中的数据。另外请注意,默认情况下,dev环境中的缓存处于禁用状态。

查看此博客条目了解更多详细信息

相关内容

  • 没有找到相关文章

最新更新