如何在 yii2 活动记录中使用查询缓存


How to use query caching in yii2 ActiveRecord

我引用指南:

"查询缓存是建立在数据缓存之上的特殊缓存功能。提供它是为了缓存数据库查询的结果。

查询缓存需要数据库连接和有效的缓存应用程序组件。查询缓存的基本用法如下,假设$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论坛上问过同样的问题,但我没有得到答案。人们似乎不知道如何在活动记录中进行查询缓存。

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

也许这个帮助:GitHub上的YiII2问题

强雪于2014年1月11日评论

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

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