在 Symfony 4.4 中使用 RedisTagAwareAdapter

问题描述

我在让 Symfony 与用于 redis 的标记感知适配器配合使用时遇到问题

对我来说不幸的是,Symfony 5.2 包含此功能,但因为我们没有切换到一个不可能的非 lts 版本。我试过检查配置,但对我来说不太适用。

这是我当前的设置:

# cache.yaml
framework:
  cache:
    prefix_seed: !php/const App\Kernel::APP_VERSION
    app: cache.adapter.redis_tag_aware
  redis.cache_app:
    class: Redis
    factory: ['Symfony\Component\Cache\Adapter\RedisAdapter','createConnection']
    arguments:
      - '%env(REDIS_DNS)%'

  cache.adapter.redis_tag_aware:
    class: Symfony\Component\Cache\Adapter\RedisTagAwareAdapter
    arguments:
      $redisClient: '@redis.cache_app'
      $marshaller: '@?cache.default_marshaller'
    calls:
      - ['setLogger',['@?logger']]
    tags:
      - { name: cache.pool,provider: cache.default_redis_provider,clearer: cache.default_clearer,reset: reset }
      - { name: monolog.logger,channel: cache }

但它尖叫着通过一些 CompilerPass 不存在参数 0。

应用缓存是不是不能作为标记缓存使用?我想我可以创建一个单独的池,也许可以使用它,但这似乎是一个奇怪的选择。

解决方法

好吧,显然这是一个配置问题。

以下将起作用

# services.yaml
  redis.cache_app:
    class: Redis
    factory: ['Symfony\Component\Cache\Adapter\RedisAdapter','createConnection']
    arguments:
      - '%env(REDIS_DNS)%'

  cache.app.redis_tag_aware:
    class: Symfony\Component\Cache\Adapter\RedisTagAwareAdapter
    arguments:
      - '@redis.cache_app'
      - ''
      - 0
      - '@?cache.default_marshaller'
    calls:
      - ['setLogger',['@?logger']]
    tags:
      - { name: cache.pool,provider: redis.cache_app,clearer: cache.default_clearer,reset: reset }
      - { name: monolog.logger,channel: cache }
# cache.yaml
framework:
  cache:
    prefix_seed: !php/const App\Kernel::APP_VERSION
    app: cache.app.redis_tag_aware

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...