0

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

我的理解是 CakePHP 可以缓存整个表并处理它,即使像文件缓存这样较慢的缓存也是如此。这意味着我查询所有信息一次,如果我说“findById(54)”,它只会在缓存中搜索 ID 54 并将其处理掉。我不想只缓存 ID 54 的内容。我还想避免更改我已经完成的代码。我知道必须有可能只 findAll() 并缓存一次,但我并没有考虑到这一点,如果我不需要,我宁愿不经历这一切。

我的问题是,如何让 CakePHP 缓存整个表并从该缓存中查询?可能吗?我对使用 memcached 持开放态度,但我想一开始我只会使用文件缓存。

4

1 回答 1

3

我有很多数据

“很多”是多少?

覆盖 AppModel 中的 find 方法

做你想做的事的一种简单技术是在你的应用模型中劫持 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;
}

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

于 2013-02-13T22:40:10.843 回答