如何使用 Doctrine 缓存存储过程
How to cache stored procedure with Doctrine
我有一个复杂的存储过程,它在 php 开发的站点上多次 运行。我从以前的开发人员那里得到了系统上的教义(我不是教义大师)。存储过程需要大约 4.62 秒才能获得 运行 和 return 结果。我想缓存结果,但不熟悉使用 Doctrine 进行缓存。结果限制为 200 个,每页 25 个。我担心的一个问题是数据可能会经常更改,因此不确定如何更快地获取站点。谢谢
编辑
我找到了 Doctrine\Common\Cache 丢失的文件并上传了它们。
我有以下功能;但是,它不是缓存:
function getGeo($latitude, $longitude, $radius, $numResults, $volunteerPid, $startPosition, $pageSize)
{
$cacheDriver = new Doctrine\Common\Cache\ArrayCache();
if ($numResults == 5) {
if ($cacheDriver->contains($volunteerPid)) {
$geoQuery = $cacheDriver->fetch($volunteerPid);
echo "Number results equals 5 and has cache";
} else {
$geoQuery = $this->connection->prepare("call sproc_qryGeoPrecint($latitude, $longitude, $radius, $numResults, $volunteerPid, $startPosition, $pageSize)");
$cacheDriver->save($volunteerPid, $geoQuery);
echo "Number results equals 5 and has NO cache";
}
} else {
if ($cacheDriver->contains($volunteerPid)) {
$geoQuery = $cacheDriver->fetch($volunteerPid);
echo "Number results equals 200 and has cache";
} else {
$geoQuery = $this->connection->prepare("call sproc_qryGeoPrecint($latitude, $longitude, $radius, $numResults, $volunteerPid, $startPosition, $pageSize)");
$cacheDriver->save($volunteerPid, $geoQuery);
echo "Number results equals 200 and has NO cache";
}
}
return $geoQuery;
}
您可能正在寻找 Doctrine result cache。您可以将执行存储过程的查询配置为使用结果缓存。如果数据经常更改,您可以为缓存设置一个较短的生命周期 and/or 设置一个事件侦听器,以便在相关数据更改时使缓存失效。
我有一个复杂的存储过程,它在 php 开发的站点上多次 运行。我从以前的开发人员那里得到了系统上的教义(我不是教义大师)。存储过程需要大约 4.62 秒才能获得 运行 和 return 结果。我想缓存结果,但不熟悉使用 Doctrine 进行缓存。结果限制为 200 个,每页 25 个。我担心的一个问题是数据可能会经常更改,因此不确定如何更快地获取站点。谢谢
编辑
我找到了 Doctrine\Common\Cache 丢失的文件并上传了它们。
我有以下功能;但是,它不是缓存:
function getGeo($latitude, $longitude, $radius, $numResults, $volunteerPid, $startPosition, $pageSize)
{
$cacheDriver = new Doctrine\Common\Cache\ArrayCache();
if ($numResults == 5) {
if ($cacheDriver->contains($volunteerPid)) {
$geoQuery = $cacheDriver->fetch($volunteerPid);
echo "Number results equals 5 and has cache";
} else {
$geoQuery = $this->connection->prepare("call sproc_qryGeoPrecint($latitude, $longitude, $radius, $numResults, $volunteerPid, $startPosition, $pageSize)");
$cacheDriver->save($volunteerPid, $geoQuery);
echo "Number results equals 5 and has NO cache";
}
} else {
if ($cacheDriver->contains($volunteerPid)) {
$geoQuery = $cacheDriver->fetch($volunteerPid);
echo "Number results equals 200 and has cache";
} else {
$geoQuery = $this->connection->prepare("call sproc_qryGeoPrecint($latitude, $longitude, $radius, $numResults, $volunteerPid, $startPosition, $pageSize)");
$cacheDriver->save($volunteerPid, $geoQuery);
echo "Number results equals 200 and has NO cache";
}
}
return $geoQuery;
}
您可能正在寻找 Doctrine result cache。您可以将执行存储过程的查询配置为使用结果缓存。如果数据经常更改,您可以为缓存设置一个较短的生命周期 and/or 设置一个事件侦听器,以便在相关数据更改时使缓存失效。