如何使用 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 设置一个事件侦听器,以便在相关数据更改时使缓存失效。