如何使用Doctrine缓存存储过程

时间:2016-01-12 06:06:25

标签: php caching doctrine procedure

我有一个复杂的存储过程,在php开发的网站上运行多次。我从以前的开发者那里学习了系统(我不是学说大师)。存储过程大约需要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;
    }

1 个答案:

答案 0 :(得分:0)

您可能正在寻找Doctrine result cache。您可以配置执行存储过程的查询以使用结果缓存。如果数据经常更改,您可以为缓存设置较短的生命周期和/或设置事件监听器,以在相关数据更改时使缓存无效。