Создайте класс провайдера кэша в Symfony

В нашем приложении Symfony 3.4 есть memcache:

cache:
app: cache.adapter.memcached
default_memcached_provider: "%app.memcached.dsn%"

Тем не менее, нас попросили использовать несколько серверов кэширования, поэтому просто передать один DSN не годится.

Смотря здесь (https://symfony.com/blog/new-in-symfony-3-3-memcached-cache-adapter), Я вижу, вы можете создать его в коде так:

$client = MemcachedAdapter::createConnection(array(
// format => memcached://[user:pass@][ip|host|socket[:port]][?weight=int]
// 'weight' ranges from 0 to 100 and it's used to prioritize servers
'memcached://my.server.com:11211'
'memcached://rmf:abcdef@localhost'
'memcached://127.0.0.1?weight=50'
'memcached://username:the-password@/var/run/memcached.sock'
'memcached:///var/run/memcached.sock?weight=20'
));

Тем не менее, это не автоматическое подключение.

Я считаю, что нам нужно либо сделать класс провайдера, либо как-то заставить его делать звонки addServer($dsn)однажды созданный. Я также видел следующее на случайных постах:

memcache:
class: Memcached
calls:
- [ addServer, [ %app.memcached.dsn.1% ]]
- [ addServer, [ %app.memcached.dsn.2% ]]

Однако это не очень помогает, или я что-то упустил.

Кто-нибудь может помочь? Как мне создать этот класс провайдера?

0

Решение

Вы можете скопировать приведенный выше фрагмент кода в качестве конфигурации сервиса в ваш services.yaml, который, вероятно, выглядит примерно так:

# app/config/services.yaml

services:
app.memcached_client:
class: Memcached
factory: 'Symfony\Component\Cache\Adapter\MemcachedAdapter::createConnection'
arguments: [['memcached://my.server.com:11211', 'memcached://rmf:abcdef@localhost']]

app.memcached_adapter:
class: Symfony\Component\Cache\Adapter\MemcachedAdapter
arguments:
- '@app.memcached_client'

Тогда в вашей конфигурации вы сможете ссылаться на адаптер, используя клиент, созданный на заводе, например, что-то вроде:

# app/config/config.yaml

framework:
cache:
app: app.memcached_adapter

Вы также можете перезаписать псевдоним по умолчанию. cache.adapter.memcached вместо того, чтобы иметь свой собственный адаптер.

Ваш подход с использованием Memcached::addServer может работать так же, но так же, как с MemcachedAdapter::createConnection это вернет клиента, который должен быть передан кеш-адаптеру. Вот почему есть второй сервис app.memcached_adapter, который используется в конфигурации кеша.

Пожалуйста, имейте в виду, что я не проверял это, так что это скорее грубый набросок, чем полностью рабочее решение,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector