我在使用Redis的模型中使用最新的(2016年3月)Yii2的查询缓存机制:
$object = $db->cache(function ($db) use($id) {
return self::findOne($id);
});
因此,设置了具有GUID ID的条目(例如“bb83d06878206d758eda3e29082dda4f”),其中包含查询结果。
每次调用Model的save方法时,是否有办法使该记录(基于id)或整个Model的表无效?
E.g。如果保存了用户记录,我们想要弄脏该用户的记录(或“用户”表),因此下次我们获取该用户时,缓存不再有效,并且从数据库中检索记录。
如果可能,我想避免DbDependency(例如记录上的“last_updated”字段),因为那是另一个数据库查询,如果我没有弄错的话。
答案 0 :(得分:1)
似乎要走的路是使用TagDependency。使用该标记,您可以在认为合适时使无效的查询无效。
您可以创建缓存查询,为其提供如下唯一标记:
$object = $db->cache(function ($db) use($id) {
return self::findOne($id);
}, 0, new TagDependency(['tags' => 'myquerytag']));
然后,当您想要使其无效时,您可以使用' 无效' TagDependency的静态方法如下:
TagDependency::invalidate(Yii::$app->cache, 'myquerytag');
请记住,在这种情况下,我为此查询提供了一个缓存过期时间,如文档示例中所示,但您可以在任何适合的时候给它。