У меня есть сложная хранимая процедура, которая запускается несколько раз на сайте, разработанном в php. У меня есть Doctrine в системе (я не учитель гуру) от предыдущего разработчика. Хранимая процедура занимает около 4,62 секунды для запуска и возврата результатов. Я хотел бы кешировать результаты, но не знаком с кешированием с помощью 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;
}
Возможно, вы ищете Кэш результатов доктрины. Вы можете настроить запрос, который выполняет хранимую процедуру, на использование кэша результатов. Если данные часто изменяются, вы можете установить короткое время жизни для кеша и / или настроить прослушиватель событий, чтобы сделать кеш недействительным при изменении соответствующих данных.
Других решений пока нет …