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

标签 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 模型中做到这一点呢?

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

最佳答案

Yii 2 现在需要闭包来包装查询。 AR 最终会进行查询,因此您可以将其放入闭包中。在 AR 类中,获取数据库并包装您要使用的查询。闭包有一个签名function($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

关于php - 如何在 yii2 ActiveRecord 中使用查询缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27943220/

相关文章:

php - 使用 fsockopen 警告握手失败 paypal IPN 集成

php - fork 一部分php代码

php - php如何从一张表中取出数据并插入到另一张表中

php - 简单的 mysql 选择查询允许的内存大小超过 256mb

ios - SDWeb图像刷新

php - 使用 htmlspecialchars() 和使用 mysqli 时不显示重音

php - 使用 PHP 添加 MySQL 中不存在的字段

php - 过滤过去24小时的sql查询

使用 Tomcat 和 Max-age 指令的 Apache Mod_cache 配置

python - 如何使用 joblib.Memory 缓存 Python 类的成员函数的输出