当它在原则中包含特定项目时,清除缓存的集合

时间:2019-02-15 11:13:03

标签: symfony caching doctrine-orm redis doctrine-query

我有一个查询,该查询从数据库中提取多个项(行),并将其缓存一个小时

public function getRatings(array $idRestaurants): array
{
    return $this->createQueryBuilder('r')
        ->select('idRating as id', 'compensated as isCompensated')
        ->where('idRestaurant in (:idRestaurants)')
        ->setParameter('idRestaurants', $idRestaurants)
        ->getQuery()
        ->useQueryCache(true)
        ->useResultCache(true, 60 * 60)
        ->getResult(Query::HYDRATE_ARRAY);
}

现在,我想在更新通过上述方法获取的项之一后清除缓存。

public function compensateRating(int $idRating)
{
    $rating = $this->entityManager->getRepository(Rating::class)
        ->findOneBy([ 'idRating' => $idRating ]);
    $rating->setCompensated(true);
    $this->entityManager->persist($rating);
    $this->entityManager->flush();
    return $rating->getCompensated();
}

我当时正在考虑将第一个查询的结果与多个键(在缓存中)链接起来,但似乎尚未合并#2668。这样做的另一种方法是基于餐馆构建缓存键,但是我需要用另一种方法发送所有餐馆的ID,这是无效的。

我不确定如何实现我想要的。我想指出,第一个方法/查询的结果需要缓存,因为查询非常昂贵。我当时以为该学说会有类似“每项”缓存的内容,但是如果删除了,我找不到它的文档。感谢您的提示。

0 个答案:

没有答案