Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有方法使Yii2查询缓存记录无效/变脏?_Php_Mysql_Caching_Activerecord_Yii2 - Fatal编程技术网

Php 是否有方法使Yii2查询缓存记录无效/变脏?

Php 是否有方法使Yii2查询缓存记录无效/变脏?,php,mysql,caching,activerecord,yii2,Php,Mysql,Caching,Activerecord,Yii2,我正在使用最新(2016年3月)的Yii2查询缓存机制,其形式为: $object = $db->cache(function ($db) use($id) { return self::findOne($id); }); 因此,设置了一个GUID ID为(例如“bb83d06878206d758eda3e29082dda4f”)的条目来保存查询结果 每次调用模型的save方法时,是否有方法使该记录(基于id)或整个模型的表失效 例如,如果保存了一个用户记录,我们希望弄脏该用户的

我正在使用最新(2016年3月)的Yii2查询缓存机制,其形式为:

$object = $db->cache(function ($db) use($id) {
    return self::findOne($id);
});
因此,设置了一个GUID ID为(例如“bb83d06878206d758eda3e29082dda4f”)的条目来保存查询结果

每次调用模型的save方法时,是否有方法使该记录(基于id)或整个模型的表失效

例如,如果保存了一个用户记录,我们希望弄脏该用户的记录(或“用户”表),因此下次我们获取该用户时,缓存不再有效,记录将从数据库中检索


如果可能的话,我希望避免DbDependency(例如记录上的“last_updated”字段),因为这是另一个DB查询,如果我没有弄错的话。

似乎应该使用。使用该标记,您可以在认为合适时使缓存的查询无效

创建缓存查询时,会给它一个唯一的标记,如下所示:

$object = $db->cache(function ($db) use($id) {
    return self::findOne($id);
}, 0, new TagDependency(['tags' => 'myquerytag']));
TagDependency::invalidate(Yii::$app->cache, 'myquerytag');
然后,当您要使其无效时,可以使用标记依赖项的“使其无效””静态方法,如下所示:

$object = $db->cache(function ($db) use($id) {
    return self::findOne($id);
}, 0, new TagDependency(['tags' => 'myquerytag']));
TagDependency::invalidate(Yii::$app->cache, 'myquerytag');
请记住,在本例中,我为该查询指定了缓存过期时间0,如文档示例中所示,但您可以在任何合适的时间指定它