1

使用 symfony 4.3,我配置了一个缓存池,它应该启用 TagAwarable 来缓存项目。配置是这样的:

framework:
cache:
    #app: cache.adapter.redis
    default_redis_provider: 'redis://%env(REDIS_HOST)%:%env(int:REDIS_PORT)%'

    pools:
        redis.cache:
            adapter: '%framework_cache_adapter%'
            provider: 'redis://%env(REDIS_HOST)%:%env(int:REDIS_PORT)%'
            default_lifetime: '%framework_cache_lifetime%'
            tags: true

在代码中,使用依赖注入,我使用池名称检索 CacheInterface 并尝试对其进行标记,这会引发以下异常:

缓存项“appSettings”来自非标记感知池:您无法标记它。

代码如下所示:

public function __construct(EntityManagerInterface $em, CacheInterface $redisCache)
{
    $this->m_cache = $redisCache;
    $this->m_entityManage = $em;
}

public function getKey(string $key) : ?string
{
    $appSettings = $this->m_cache->get(self::CACHE_KEY, function (ItemInterface $item) {
        $item->expiresAfter(3600);
        $item->tag([ 'settings', 'app_cache' ]);

        return $settings;
    });

    return $appSettings[$key] ?? null;
}

我尝试了不同的方法无济于事,不知道如何从这里开始。

感谢任何帮助如何使项目被标记。

4

1 回答 1

7

我遇到了同样的问题。
使用\Symfony\Contracts\Cache\TagAwareCacheInterface为我修复它。

编辑
有关更多信息, 请参阅https://github.com/symfony/symfony/issues/33201

于 2019-08-15T23:41:06.143 回答