在 Symfony 4.4 中使用 RedisTagAwareAdapter
Posted
技术标签:
【中文标题】在 Symfony 4.4 中使用 RedisTagAwareAdapter【英文标题】:Using RedisTagAwareAdapter in Symfony 4.4 【发布时间】:2021-09-01 03:42:44 【问题描述】:我在让 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 大喊大叫。
难道不能将应用缓存用作标记缓存吗?我想我可以创建一个单独的池并使用它,但这似乎是一个奇怪的选择。
【问题讨论】:
【参考方案1】:好的,很明显这是一个配置问题。
以下将起作用
# 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
【讨论】:
以上是关于在 Symfony 4.4 中使用 RedisTagAwareAdapter的主要内容,如果未能解决你的问题,请参考以下文章
我啥时候应该在 Symfony 4.4 控制器中使用拒绝访问功能?
Symfony 4.4如何使用collectionType从0个字段开始
从 symfony 4.4 中截取 login_check 路径