有没有一种方法可以使Yii2查询缓存记录失效/脏?

3
我正在使用最新的Yii2查询缓存机制(2016年3月)在具有Redis的模型中,表格如下:
$object = $db->cache(function ($db) use($id) {
    return self::findOne($id);
});

作为结果,设置了一个带有GUID ID(例如“bb83d06878206d758eda3e29082dda4f”)的条目,其中保存了查询结果。
是否有一种方法可以使记录(基于ID)或整个模型表在每次调用模型的保存方法时失效?
例如,如果保存了用户记录,我们希望将该用户的记录(或“用户”表)标记为脏数据,因此下次获取该用户时,缓存将不再有效,并且记录将从数据库中检索。
如果可能的话,我想避免DbDependency(例如对记录上的“last_updated”字段),因为这是另一个数据库查询,如果我没弄错的话。
1个回答

1
似乎最好的方法是使用TagDependency。使用该标记,您可以在需要时使缓存查询失效。
创建缓存查询并赋予其唯一标记,如下所示:
$object = $db->cache(function ($db) use($id) {
    return self::findOne($id);
}, 0, new TagDependency(['tags' => 'myquerytag']));

当您想要使其无效时,可以使用TagDependency的'invalidate'静态方法,方法如下:

TagDependency::invalidate(Yii::$app->cache, 'myquerytag');

请记住,在这种情况下,我为此查询设置了0的缓存过期时间,就像文档示例中一样,但您可以根据需要设置任何时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接