Я использую memcached в качестве компонента кэша для моего приложения Yii2.Фон в том, что у меня довольно сложный компонент GridView, который часто вызывает функцию связанной модели, считая некоторые отношения.Некоторые из этих функций вызываются довольно часто (один раз для отображения и несколько раз для оценки того, какие столбцы действий должны быть показаны.
Теперь проблема заключается в том, что я хочу кэшировать значение, но только для уникального запроса ине для какого-либо определенного периода времени, так как список довольно часто обновляется. Приведенные ниже примеры кода взяты из модели.
Первая попытка состояла в том, чтобы просто использовать кэш с короткой продолжительностью, как показано ниже. Это, однако, не кажетсяна работу. Даже через несколько минут значение не обновляется, пока я не удалю команды кэша.
public function getRelationCount()
{
return Yii::$app->cache->getOrSet('wc_'.$this->id.'_cc', function () {
return $this->getRelationss()->count();
}, 5);
}
Второй попыткой было добавление ExpressionCondition
для идентификации запроса, но мне не удалось найти условиекоторый идентифицирует запрос, а не сессию. Для сессии это довольно просто:
public function getCompetitorCount()
{
$dependency = new ExpressionDependency(['expression' => 'Yii::$app->session->getId();']);
return Yii::$app->cache->getOrSet('wc_'.$this->id.'_cc', function () {
return $this->getCompetitors()->count();
}, 30, $dependency);
}
Есть идеи, как кэшировать значение только для запроса?