Как разделить Redis Connection / RedisCache в Symfony между службами / контроллерами? - PullRequest
0 голосов
/ 17 января 2019

У меня есть некоторые контроллеры, расширения веток и другие классы, которые требуют кэширования.Я использую Redis как кеш.В настоящее время я устанавливаю новый RedisCache в каждом из этих мест, например так:

public function __construct(LoggerInterface $logger)
{
    $this->logger = $logger;


    $this->cache = new RedisCache(RedisAdapter::createConnection(getenv('REDIS_URL')), 'ImageHelper');
}

Но это создает много подключений к бэкэнду Redis, что, по моему мнению, не очень хорошо для производительности.

Каков наилучший способ либо использовать RedisConnection / Client между моими контроллерами / расширениями / классами, либо даже совместно использовать RedisCache, но сохранять способность к пространству имен?

Я использую Symfony 4.

1 Ответ

0 голосов
/ 17 января 2019

Вы должны сделать Redis-кеш сервисом, а потом внедрить его в свои контроллеры (или других зависимых). При необходимости обратитесь к документации Symfony для вставки зависимостей .

Вот пример, который вам может понадобиться настроить позже:

# config/services.yaml
services:
    redis_connection:
        class: 'RedisConnection'
        factory: ['RedisAdapter', createConnection]
        arguments: 
          - '%env(REDIS_URL)%'

    redis_cache:
        class: 'RedisCache'
        arguments:
          - '@redis_connection'

Обратите внимание, что я не знаю, какие пространства имен имеют ваши классы, поэтому вам придется соответствующим образом изменить конфигурацию.

И тогда вам также потребуется настроить инфраструктуру для внедрения службы вашим контроллерам (или другим иждивенцам):

# config/services.yaml
services:
  # ...
  App\Controller\ExampleController:
      arguments:
        - '@logger'
        - '@redis_cache'

Кроме того, вы должны обновить контроллеры так, чтобы они принимали новый аргумент в конструкторе, например:

public function __construct(LoggerInterface $logger, RedisCache $cache)
{
    $this->logger = $logger;
    $this->cache = $cache;
}

Если у вас есть какие-либо вопросы, обратитесь к документации контейнера службы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...