如何在yii2 ActiveRecord中使用查询缓存

时间:2015-01-14 12:42:04

标签: php mysql caching activerecord yii2

我引用了指南:

``查询缓存是一种基于数据缓存的特殊缓存功能。它用于缓存数据库查询的结果。

查询缓存需要数据库连接和有效的缓存应用程序组件。查询缓存的基本用法如下,假设$ db是yii \ db \ Connection实例:

$result = $db->cache(function ($db) {

    // the result of the SQL query will be served from the cache
    // if query caching is enabled and the query result is found in the cache
    return $db->createCommand('SELECT * FROM customer WHERE id=1')->queryOne();

});

``

我认为我不会在AR类中手动创建数据库连接。那么如何在我的AR模型中做到这一点?

我在yii2论坛上问the same question,但我没有回答。似乎人们不知道如何在Active Record中进行查询缓存。

2 个答案:

答案 0 :(得分:3)

Yii 2现在需要闭包来包装查询。 AR最终会进行查询,因此您可以将其放入闭包中。在AR类中,获取数据库并包装要使用的查询。闭包有一个签名函数($ db),你通常需要访问更多变量,所以添加 use($ variable)使变量在闭包中可见。

    $db = self::getDb();
    $object = $db->cache(function ($db) use($id) {
        return self::findOne($id);
    });

如果您写入数据库,则上面的缓存在缓存持续时间到期之前不会知道它。因此,应该将依赖项添加到缓存函数中,以告知它何时使缓存无效。依赖变得快速复杂...... http://www.yiiframework.com/doc-2.0/yii-caching-dependency.html

答案 1 :(得分:0)

也许这有帮助:yii2 issues on github

  qiangxue于2014年1月11日发表评论

     

在2.0中,您需要使用以下代码:

$db->beginCache();
// your db query code here...
$db->endCache();