Symfony2/Doctrine2 缓存内容以避免查询
Symfony2/Doctrine2 caching stuff to avoid queries
背景:我有一个相当大的 table(2000 行,10 列),里面装满了小整数(仅 0,1,2)。
给定一个实体和该实体的一个字段,根据 10 列的值,如果我想在呈现表单时显示和/或要求该实体的该字段,我将获得信息。
每次我在表单生成器中添加 -> 添加时,我不想为每个字段查询数据库,而是想将整个 table "somewhere" 缓存在服务器的内存中。
我该怎么做?是否需要每个用户 "loads" table,或者是否可以为所有用户完成一次并且每个用户只需读取服务器的 RAM?
table 几乎从未改变。我仍然需要能够每隔一段时间上传它的更新版本(很少)。
谢谢!
SN
您需要做的就是使用useResultCache
方法。
Doctrine
使用在 Symfony
配置中设置的缓存驱动程序,因此当您编写 queryBuilder
从您的 table 获取数据时,只需告诉 Doctrine
您希望缓存结果(缓存多长时间和在什么键下是可选的):
class YourEntityRepository extends EntityRepository
{
public function getAllRowsCached()
{
$cachedResult = $this->createQueryBuilder('e')
->getQuery()
->useResultCache(true, 3600, 'cache_key')
->getArrayResult();
return $cachedResult;
}
}
缓存对所有用户都是通用的,因此第一个用户将查询数据库,第二个用户将使用缓存中的数据。还要注意,默认情况下 dev
环境缓存是禁用的。
检查 this blog entry 了解更多详细信息
背景:我有一个相当大的 table(2000 行,10 列),里面装满了小整数(仅 0,1,2)。 给定一个实体和该实体的一个字段,根据 10 列的值,如果我想在呈现表单时显示和/或要求该实体的该字段,我将获得信息。 每次我在表单生成器中添加 -> 添加时,我不想为每个字段查询数据库,而是想将整个 table "somewhere" 缓存在服务器的内存中。
我该怎么做?是否需要每个用户 "loads" table,或者是否可以为所有用户完成一次并且每个用户只需读取服务器的 RAM?
table 几乎从未改变。我仍然需要能够每隔一段时间上传它的更新版本(很少)。
谢谢!
SN
您需要做的就是使用useResultCache
方法。
Doctrine
使用在 Symfony
配置中设置的缓存驱动程序,因此当您编写 queryBuilder
从您的 table 获取数据时,只需告诉 Doctrine
您希望缓存结果(缓存多长时间和在什么键下是可选的):
class YourEntityRepository extends EntityRepository
{
public function getAllRowsCached()
{
$cachedResult = $this->createQueryBuilder('e')
->getQuery()
->useResultCache(true, 3600, 'cache_key')
->getArrayResult();
return $cachedResult;
}
}
缓存对所有用户都是通用的,因此第一个用户将查询数据库,第二个用户将使用缓存中的数据。还要注意,默认情况下 dev
环境缓存是禁用的。
检查 this blog entry 了解更多详细信息