自动装配TagAwareCache并注入服务

时间:2018-11-08 00:09:10

标签: symfony

我想用APCU后端配置TagAwareCache。 结果应该注入到服务中。

所以我有这个config.yml:

cache:
    pools:
        data_evaluator_cache_items_cache: # apcu backend
            adapter: cache.adapter.apcu
            public: true

data_evaluator_cache:
    class: Symfony\Component\Cache\Adapter\TagAwareAdapter
    arguments:
        $itemsPool: "@data_evaluator_cache_items_cache"
    public: true

AppBundle\Service\DataEvaluator:
    alias: data_evaluator
    arguments:
        $cache: "@data_evaluator_cache"

data_evaluator:
    class: AppBundle\Service\DataEvaluator
    public: true
    arguments:
        $cache: "@data_evaluator_cache"

服务如下:

class DataEvaluator {
    public function __construct(Logger $l, AdapterInterface $cache) {
    }
} 

根据我的测试,注入的$cache确实是TagAwareAdapter,所以很好。

但是,我怀疑提供给TagAwareCache的项目内部缓存是apcu缓存。这些东西很好,这些是我的标签。

这是Web工具栏的两个屏幕截图。首先,我看到data_evaluator_cache_items_cache用于我的缓存项/有效负载。 enter image description here

下一个屏幕截图让我感到紧张:cache.app用于标记! cache.app解析为FilesystemCache

enter image description here

顺便说一句:对物品和标签使用APCU是个好主意吗?我不需要分布式缓存。我听说自PHP7 / opcache以来,现代的PhpFilesCache是​​一件好事。有人有实践经验吗?

1 个答案:

答案 0 :(得分:0)

我解决了: 不幸的是symfony docs中有一个小错误。 这有效:

cache:
    pools:
        data_evaluator_cache_items_cache:
            adapter: cache.adapter.apcu
            public: true
        data_evaluator_cache_tags_cache:
            adapter: cache.adapter.apcu
            public: true

data_evaluator_cache:
    class: Symfony\Component\Cache\Adapter\TagAwareAdapter
    arguments:
        $itemsPool: "@data_evaluator_cache_items_cache"
        $tagsPool: "@data_evaluator_cache_tags_cache"
    public: true