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;
        }
    }
}

memcacheサーバーでヒットがない場合、PhalconModelクラスがデータベースクエリを返すと想定しています。find()は何かを見つけてキャッシュしているようですが、何も返されません。Phalconでキャッシングがどのように機能するか理解していませんか?それとも私は何か間違ったことをしているだけですか?

4

1 に答える 1

0

問題は解決されました。Andres (Phalcon の開発者の 1 人) と協力して、私が抱えていた問題を解決する手助けをしました。私が予想していたよりもコードが深かったことがわかりました。

良いニュースは、それが解決され、phalcon の githubの 0.8.0 ブランチにプッシュされたことです! 再コンパイルすることを忘れないでください!

于 2013-01-03T22:55:36.903 に答える