如何清除yii2 AR中的缓存?

6
如何清除当前数据的缓存?
$result = Customer::getDb()->cache(function ($db) use ($id) {
    return Customer::findOne($id);
}, 60 * 60 * 24 * 4);

我希望在更新后清除客户当前数据的缓存。
2个回答

8

您可以修改此代码以使用数据缓存而不是查询缓存,从而可以使用唯一密钥。

$data = $cache->get('customer' . $id);
if ($data === false) {
    $data = Customer::findOne($id);
    $cache->set('customer' . $id, $data, 60 * 60 * 24 * 4);
}

从2.0.11版本开始:

$data = $cache->getOrSet('customer' . $id, function () use ($id) {
    return Customer::findOne($id);
}, 60 * 60 * 24 * 4);

现在您可以使用:
$cache->delete('customer' . $id);

2
您可以使用flush来进行全局清除。
Yii::$app->cache->flush();

您可以使用 TagDependency
$result = Customer::getDb()->cache(function ($db) use ($id) {
    return Customer::findOne($id);
}, 60 * 60 * 24 * 4, new TagDependency(['tags'=>'customer']));

//to flush
TagDependency::invalidate(Yii::$app->cache, 'customer');

更多信息请查看 这里


我理解的对吗?对于当前的 $id,我可以添加 new TagDependency(['tags'=>'customer-' . $id],然后刷新 TagDependency::invalidate(Yii::$app->cache, 'customer-' . $id); - lolka
你试过这样做吗? - lalithkumar
是的,它对我没有起作用((,我不想清除所有缓存。只针对当前客户的 $id。 - lolka

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