0

我正在尝试在我的应用程序中实现 memcache,但遇到了一些奇怪的问题。如果我在没有缓存的情况下运行 find(),那么我找不到任何结果。但是,如果我运行相同的查询(刷新页面),那么我会得到我期望的结果。

这是我的代码:

<?php
    //Set the models cache service
    $di->set('modelsCache', function(){
        // Cache data for one day by default
        $frontCache = new \Phalcon\Cache\Frontend\Data(array(
            "lifetime" => 86400
        ));

        // Memcached connection settings
        $cache = new \Phalcon\Cache\Backend\Memcache($frontCache, array(
            "host" => "localhost",
            "port" => "11211"
        ));

        return $cache;
    });

<?php
class VideosController extends IndexController {
    public function viewAction() {
        /**
         * This will always return an array;
         * param 0 will always be the int
         */
        $params = $this->dispatcher->getParams();

        $id = $params[0];

        $cacheName = 'videoForView_'.$id;

        try {
            $video = Videos::findFirst(array(
                'id='.$id,
                'cache' => array(
                    'key' => $this->router->getControllerName().'_'.$this->router->getActionName().'_'.$id
                )
            ));

            $this->view->setVar('video', $video);
        } catch(Exception $e) {
            echo '<pre>';
            var_dump($e);
            exit;
        }
    }
}

我假设如果内存缓存服务器没有命中,Phalcon 模型类会返回一个数据库查询。似乎 find() 确实找到了一些东西并缓存了它,但它没有返回任何东西。我不了解缓存在 Phalcon 中的工作原理吗?还是我只是做错了什么?

4

1 回答 1

0

问题已解决。我与 Andres(Phalcon 的开发人员之一)一起工作,帮助他解决了我遇到的问题。事实证明,它的代码比我预期的要深。

好消息是它已经解决,并被推送到phalcon 的 github上的 0.8.0 分支!不要忘记重新编译!

于 2013-01-03T22:55:36.903 回答