我正在尝试将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 Model类会返回一个数据库查询,如果memcache服务器没有命中。似乎find()确实能找到并缓存它,但它并没有给我任何回报。我不明白Phalcon的缓存是如何工作的?或者我只是做错了什么?
答案 0 :(得分:0)
问题已经解决。我和Andres(Phalcon的开发人员之一)一起工作,帮助他解决我遇到的问题。事实证明,代码中的代码比我预期的要深。
好消息是它已经解决,并被推到phalcon's github的0.8.0分支!别忘了重新编译!