如何仅针对某个控制器操作禁用实体缓存到 Redis?

How to disable entity caching to Redis only for a certain controller action?

我有一个控制器操作在 database/entities 上执行一些繁重的工作。在分析时,我注意到写入 Redis 的缓存层浪费了很多时间。有什么办法可以只针对这个特定的路由禁用二级缓存到Redis吗?

您可以禁用缓存或更改每个查询,例如useQueryCache() or useResultCache().

在您的存储库中,您可以使用 $this->createQueryBuilder() 构建查询。或者,实体管理器提供了一个 createQuery() 方法,它接受一个 DQL 字符串。在从这些方法中的任何一个生成的查询对象上,在查询对象上调用 getResult() 之前,您可以调用这些方法。

找到了一种方法:

扩展 Symfony\Component\Cache\DoctrineProvider class 并覆盖 savesaveMultiple 方法。在 class 上使用静态布尔变量来控制保存到缓存:

// Your custom class that extends the DoctrineProvider
public function save($id, $data, $lifeTime = 0)
{
    if (static::$enableWriting === false) {
        return false;
    }

    return parent::save($id, $data, $lifeTime);
}


// packages/doctrine.yaml
services:
    doctrine.result_cache_provider:
        class: App\Cache\ResultCacheDoctrineProvider
        public: false
        arguments:
            - '@doctrine.result_cache_pool'