使用CakePHP缓存大量数据

时间:2013-02-13 21:13:15

标签: cakephp caching cakephp-2.0

我有一个很多的数据,我可以使用它,它几乎不会改变,并且根本不时刷新缓存根本不是问题 - 但理想情况下缓存将是仅在新数据进入表格时刷新。

我建立时理解CakePHP可以缓存整个表并解决这个问题,即使使用较慢的缓存(如文件缓存)也是如此。意思是我查询所有信息一次,如果我说“findById(54)”,它只搜索该缓存的ID 54并将其处理掉。我不想只缓存ID 54的内容。我也想避免更改我已经完成的代码。我知道必须有可能只是findAll()并缓存一次,但我没有考虑到这一点,如果我不需要,我宁愿不通过它。

我的问题是,如何让CakePHP缓存整个表并查询该缓存?可能吗?我愿意使用memcached,但我正在考虑我只会使用文件缓存。

1 个答案:

答案 0 :(得分:3)

  

我有很多的数据

多少“很多”?

覆盖AppModel中的find方法

执行您想要的操作的一种简单方法是在您的应用模型中劫持查找调用,并返回缓存结果(如果有),类似于:

public function find($type = 'first', $params = array()) {
    $key = md5(serialize(func_get_args());
    $return = Cache::read($key);
    if (false !== $return) {
        return $cacheResult;
    }

    $return = parent::find($type, $params);
    Cache::write($key, $return);
    return $return;
}

通过这种方式,您可以在使用数据库时填充缓存,并且可以禁用缓存,或者拥有空缓存,并且仍然可以使您的站点正常工作。