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

时间:2015-05-11 15:28:39

标签: symfony caching doctrine-orm

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

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

那张桌子几乎没有变化。我仍然需要每隔一段时间上传一次更新版本(veeery很少)。

谢谢!

SN

1 个答案:

答案 0 :(得分:1)

您需要做的就是使用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;
    }

}

缓存对所有用户都是通用的,因此第一个用户将查询DB,第二个将使用缓存中的数据。另请注意,默认情况下,dev环境缓存已禁用。

检查this blog entry以获取更多详细信息