【问题标题】:Completely Remove Query Cache From CakePHP 2.x从 CakePHP 2.x 中彻底删除查询缓存
【发布时间】:2013-10-08 11:15:01
【问题描述】:

我有以下查询发生

 public function test()
 {
    $uuid = substr( String::uuid() , 4 , rand( 7 , 10 ) );
    $name = $uuid;

    $event = $this->Event->getEvent( array( "event_id" => "5240e695-9acc-4e32-9b98-1aecb3d0838" ) );
    $event[ "event_name" ] = $name;

    $this->Event->update( $event );

    debug( $this->Event->search( array( "event_id" => $event[ "event_id"] ) )[ 0 ][ "event_name" ] );

    debug( $this->Event->search( array( "event_id" => $event[ "event_id"] , "limit" => 1 ) )[ 0 ][ "event_name" ] );
}

我为从 mySQL ( InnoDB ) 表 event 检索到的特定事件分配一个随机名称,为其分配一个随机新名称,并将其保存回数据库中。

当我运行这段代码中的最后两条语句时,结果不一样,请注意第二个查询中的最后一个参数只是在第二个查询的末尾添加了 LIMIT 1。 (我没有使用 CakePHP 2.x 的典型搜索表方法)。第一次搜索调用的结果将产生先前请求的先前结果,而第二次搜索调用将在event 表中产生实际当前更新的名称。

我一直在研究如何从数据源对象中完全删除查询缓存,但不知道如何。我试过在数据源对象上使用flushMethodCache(),但它什么也没做,我试过设置

$cacheQueries = false, $cacheSources = false;

在 AppModel 中,但这也无济于事。我试过查看 /App/Config/Core.php 并禁用缓存,并将缓存时间设置为 0。这些都不起作用。

【问题讨论】:

  • search 函数有什么作用?你可以发布一些关于它的代码吗?为什么您不使用 CakePHP 2.x 的典型搜索表方法
  • 出于安全原因,我不能发布框架的内部结构,但我可以发布这两个函数调用执行的两个查询字符串。 pastebin.com/YTFskNPF 每当第一个查询被修改,但返回等效结果时,查询返回由事件模型在query 函数中调用的 PREVIOUS 结果,我得出的结论是查询正在被缓存。我不使用 CakePHP 2.x 的典型 CRUD 方法,因为它们不能完全满足我正在构建的应用程序的复杂需求,因为我需要比 CakePHP 2.x 提供的更多的查询自定义。

标签: mysql cakephp caching innodb cakephp-2.3


【解决方案1】:

发现问题:

而不是调用

$model->query( $string );

我需要打电话

$model->query( $string, false );

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2014-10-06
  • 2019-06-15
  • 2017-12-24
  • 1970-01-01
  • 2014-07-03
  • 2023-03-14
相关资源
最近更新 更多