symfony - 在 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
推荐阅读
- python - 为什么if语句正在执行而语句为假
- mysql - 询问!我怎样才能从每个用户的三张桌子上获得总餐费和费用!这是我的第一个问题,很抱歉给您带来不便
- html - 使标题 (h1, h2, ...) 从正文继承样式
- php - 如何阻止 laravel 用户在设备之间交换
- c# - 尝试使用 LINQ to SQL 创建节点树会产生 NotSupportedException
- c++ - 使用 __single_client_alloc 找到了一些旧代码 - 我该如何恢复它?
- c# - 如何实现具有公共属性但私有设置方法的多个接口?
- python - 从附近目录而不是从站点包中导入 Python 模块
- ios - iOS Swift:切换到耳机或从耳机切换时录音机中断
- python - 用标签替换字符串中的单词