Symfony 3: настройка пулов компонентов кеша с помощью Redis

Я хочу использовать новый компонент кэширования для хранения данных в Redis.

Я хотел бы настроить пулы с разным временем жизни данных.

Прямо сейчас я настроил:

framework:
    cache:
        app: cache.adapter.redis
        default_redis_provider: "redis://localhost:6379"
        pools:
            app.cache.codification:
                adapter: cache.app
                default_lifetime: 86400
            app.cache.another_pool:
                adapter: cache.app
                default_lifetime: 600

Но я не знаю, как использовать пул app.cache.codification в своем коде. Я объявил следующий сервис:

acme.cache.repository.code_list:
    class: Acme\Cache\Repository\CodeList
    public: false
    arguments:
        - "@cache.app"
        - "@acme.webservice.repository.code_list"

И я использую это так:

class CodeList
{
    private $webserviceCodeList;

    /**
     * @var AbstractAdapter
     */
    private $cacheAdapter;

    public static $CACHE_KEY = 'webservices.codification.search';

    private $lists;

    /**
     * @param AbstractAdapter $cacheAdapter
     * @param WebserviceCodeList $webserviceCodeList
     */
    public function __construct($cacheAdapter, $webserviceCodeList)
    {
        $this->cacheAdapter = $cacheAdapter;
        $this->webserviceCodeList = $webserviceCodeList;
    }

    /**
     * @param string $listName
     * @return array
     */
    public function getCodeList(string $listName)
    {
        if ($this->lists !== null) {
            return $this->lists;
        }

        // Cache get item
        $cacheItem = $this->cacheAdapter->getItem(self::$CACHE_KEY);

        // Cache HIT
        if ($cacheItem->isHit()) {
            $this->lists = $cacheItem->get();
            return $this->lists;
        }

        // Cache MISS
        $this->lists = $this->webserviceCodeList->getCodeList($listName);
        $cacheItem->set($this->lists);
        $this->cacheAdapter->save($cacheItem);

        return $this->lists;
    }
}

person melicerte    schedule 19.04.2017    source источник
comment
Получаете ли вы какие-либо ошибки, используя его таким образом? Что-то не работает? Что, по вашему мнению, должно произойти?   -  person Chase    schedule 19.04.2017
comment
У меня нет ошибок, но я хотел бы иметь возможность выбирать между двумя пулами app.cache.codification и app.cache.another_pool, каждый из которых имеет разное время жизни. Я не знаю, как это сделать.   -  person melicerte    schedule 20.04.2017


Ответы (1)


Чтобы предоставить пул как услугу, вам нужны две дополнительные опции: name и public, а именно:

framework:
    cache:
        app: cache.adapter.redis
        default_redis_provider: "redis://localhost:6379"
        pools:
            app.cache.codification:
                name: app.cache.codification # this will be the service's name
                public: true # this will expose the pool as a service
                adapter: cache.app
                default_lifetime: 86400
            app.cache.another_pool:
                name: app.cache.another_pool
                public: true
                adapter: cache.app
                default_lifetime: 600

Теперь вы можете использовать оба пула в качестве сервисов, указав их имя:

acme.cache.repository.code_list:
    class: Acme\Cache\Repository\CodeList
    public: false
    arguments:
        - "@app.cache.codification" # pool's name
        - "@acme.webservice.repository.code_list"

Подробнее об опциях кеша: http://symfony.com/doc/current/reference/configuration/framework.html#public

Ваше здоровье!

person HELOstore    schedule 02.05.2017