Адаптер кеша Memcached
Дата обновления перевода 2023-08-17
Адаптер кеша Memcached
Этот адаптер сохраняет значения в оперативной памяти, используя один (или больше) экземпляр Memcached server. В отличие от адаптера APCu adapter, и схоже с адаптером Redis, он не ограничен общей памятью текушего сервера; вы можете хранить содержание независимо от вашего PHP окружения. Возможность использовать кластер серверов для предоставляения избыточности и / или восстановления после отказа, также доступна.
Caution
Требования: PHP-расширение Memcached, а также сервер Memcached
должны быть установлены, активны и запущены для использования этого адаптера.
Для этого адаптера требуется версия PHP-расширения Memcached 2.2
и выше.
Этот адаптер ожидает передачи экземпляра Memcached в качестве первого параметра. Пространство имён и время жизни кеша по умолчанию могут быть опционально переданы в качестве второго и третьего параметров:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
$cache = new MemcachedAdapter(
// объект клиента, который устанавливает опции и добавляет экземпляр(ы) сервера
\Memcached $client,
// строка-префикс ключей объектов, хранящихся в этом кеше
$namespace = '',
// время жизни по умолчанию (в секундах) для объектов кеша, которые не определяют
// собственное время жизни, со значением 0, вызывающим бесконечное хранение объектов
// (т.е. пока не вызывается MemcachedAdapter::clear() или не перезапускается сервер(ы))
$defaultLifetime = 0
);
Сконфигурируйте соединение
Метод помощника createConnection() позволяет создание и конфигурацию экзепмпляра класса Memcached, используя Domain Name System (DNS) или массив DSN:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
// передайте одну строку DSN, чтобы зарегистрировать один сервер для клиента
$client = MemcachedAdapter::createConnection(
'memcached://localhost'
// DSN может включать в себя опции конфигурации (передайте их в качестве строки запроса):
// 'memcached://localhost:11222?retry_timeout=10'
// 'memcached://localhost:11222?socket_recv_size=1&socket_send_size=2'
);
// передайте массив строк DSN, чтобы зарегистрировать несколько серверов для клиента
$client = MemcachedAdapter::createConnection(array(
'memcached://10.0.0.100',
'memcached://10.0.0.101',
'memcached://10.0.0.102',
// и др...
));
// одно DSN может определять несколько серверов, используя следующий синтаксис:
// host[hostname-or-IP:port] (где порт является опциональным). Сокеты должны содержать замыкание ':'
$client = MemcachedAdapter::createConnection(
'memcached:?host[localhost]&host[localhost:12345]&host[/some/memcached.sock:]=3'
);
Имя источника данных (DSN) для этого адаптера должна использовать следующий формат:
1
memcached://[user:pass@][ip|host|socket[:port]][?weight=int]
DSN должна включать в себя IP/хост (и необязательный порт) или путь сокета, необязательное
имя пользователя и пароль(для SASL аутентификации; она требует, чтобы расширение memcached
было скомпилировано используя --enable-memcached-sasl
) и необязательным весом (для
приоретизации серверов в кластере; его значение - это число между 0
и 100
, которое
по умолчанию null
; чем выше значение, тем выше приоритет).
Ниже предоставлены распространённые примеры валидных DSN, демонстрирующих комбинацию доступных значений:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
$client = MemcachedAdapter::createConnection(array(
// имя хоста + порт
'memcached://my.server.com:11211'
// имя хоста без порта + имя пользователя и пароль SASL
'memcached://rmf:abcdef@localhost'
// IP адеса вместо имени хоста + вес
'memcached://127.0.0.1?weight=50'
// сокет вместо имени хоста/IP + имя пользователя и пароль SASL
'memcached://janesmith:mypassword@/var/run/memcached.sock'
// сокет вместо имени хоста/IP + вес
'memcached:///var/run/memcached.sock?weight=20'
));
Сконфигурируйте опции
Метод помощника createConnection()
также принимает массив опций в качестве второго аргумента. Ожидаемый формат - это
ассоцитивный массив пар key => value
, представляющих имена опций и их соответствующие
значения:
1 2 3 4 5 6 7 8 9 10 11 12 13
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
$client = MemcachedAdapter::createConnection(
// DSN-строка или массив DSN-строк
array(),
// ассоциативный массив опций конфигурации
array(
'compression' => true,
'libketama_compatible' => true,
'serializer' => 'igbinary',
)
);
Доступные опции
auto_eject_hosts
(тип:bool
, по умолчанию:false
)-
Включает или отключает константу, автоматизацию, повторную балансировку
кластера, путём авто-извлечения хостов, превысивших сконфигурированный
server_failure_limit
. buffer_writes
(тип:bool
, по умолчанию:false
)- Включает или отключает буферищированные операции ввода и вывода, что приводит к сохранению команд в буфер вместо немедленной отправки на удалённый(е) сервер(ы). Любое действие, извлекающее данные, прекращающее соединение или закрывающее соединение, приведёт к фиксации буфера.
connect_timeout
(тип:int
, по умолчанию:1000
)-
Указывает тайм-аут (в милисекундах) операций соединения сокета, при включённой опции
no_block
.Валидные значения опции включают в себя любое положительное целое число.
distribution
(тип:string
, по умолчанию:consistent
)-
Указывает метод распространения ключа объекта среди серверов. Постоянное хеширование предоставляет лучшее распределение и позволяет добавлять серверы вкластеры с минимальными потерями кеша.
Валидные значения опции включают в себя
modula
,consistent
, иvirtual_bucket
. hash
(тип:string
, по умолчанию:md5
)-
Указывает алгоритм хеширования, использованный для ключей объектов. Каждый алгоритм хеша имеет свои преимущества и недостатки. Вариант по умолчанию предлагается для совместимости с другими клиентами.
Валидные значения включают в себя
default
,md5
,crc
,fnv1_64
,fnv1a_64
,fnv1_32
,fnv1a_32
,hsieh
, иmurmur
. libketama_compatible
(тип:bool
, по умолчанию:true
)-
Включает или отключает поведение, совместимое с "libketama", что позволяет
другим клиентам, основанным на libketama, свободно получать доступ к ключам,
сохранённым экземпляром клиента (вроде Python и Ruby). Подключение этой опции
устанавливает опцию
hash
, какmd5
, а опциюdistribution
- какconsistent
. no_block
(тип:bool
, по умолчанию:true
)- Включает или отключает асинхронные операции ввода и вывода. Это наиболее быстрая транспортная опция, доступная для функций хранения.
number_of_replicas
(тип:int
, по умолчанию:0
)-
Указывает количество реплик, которые должны сохраняться для каждого объекта (на разных серверах). Это не обязывает определенные мем-кешированные серверы хранить реплики, а вемсто этого сохраняет реплики вместе со всеми другими объектами (на "n" - следующих зарегистрированных серверах).
Валидные значения опции включают в себя любое положительное число.
prefix_key
(тип:string
, по умолчанию: an empty string)-
Указывает "домен" (или "пространство имён"), досбавленный к вашим ключам. Он не может быть длиннее 128 знаков и уменьшает максимальный размер ключа.
Валидные значения опции включают в себя любую буквенно-цифровую строку.
poll_timeout
(тип:int
, по умолчанию:1000
)-
Указывает количество времени (в секундах) перед тайм-аутом во время операции опроса сокетов.
Валидные значения опции включают в себя любое положительное число.
randomize_replica_read
(тип:bool
, по умолчанию:false
)- Включает или отключает рандомизацию отправной точки чтения реплики. Обычно чтение происходит с основного сервера, а в случае ошибки - с "primary+1", потом "primary+2", и так до "н" реплик. Эта опция устанавливает чтения реплик рандомизированно между всеми доступными серверами; это позволяет распределять нагрузку чтений на несколько серверов за счёт увеличения трафика записи.
recv_timeout
(тип:int
, по умолчанию:0
)-
Указывает количество времени (в микросекундах) до тайм-аута во время операции исходящего сокета (чтения). Когда опция
no_block
не включена, это позволит вам всё равно иметь тайм-ауты во время чтения данных.Валидные значения опции включают в себя
0
или любое положительное число. retry_timeout
(тип:int
, по умолчанию:0
)-
Указывает количество времени (в секундах) до тайм-аута и повторной попытки установки соединения.
Валидные значения опции включают в себя любое положительное число.
send_timeout
(тип:int
, по умолчанию:0
)-
Указывает количество времени (в микросекундах) до тайм-аута во время операций входящего сокета (отправки). Когда опция
no_block
е включена, это позволит вам всё равно иметь тайм-ауты во время отправки данных.Валидные значения опции включают в себя
0
или любое положительное число. serializer
(тип:string
, по умолчанию:php
)-
Указывает, как сериализатор использовать для сериализации нескалярных значений. Опции
igbinary
требуют включения ig-бинарного PHP расширения, а также компиляции мем-кешированного расширения для его поддержки.Валидные значения опции включают в себя
php
иigbinary
. server_failure_limit
(тип:int
, по умолчанию:0
)-
Указывает лимит неудачных попыток установить соединение с сервером до того, как отметить сервер, как "мёртвый". Сервер будет оставаться в пуле серверов, если не включена опция
auto_eject_hosts
.Валидные значения опции включают в себя любое положительное число.
socket_recv_size
(тип:int
)-
Указывает максимальный размер буфера (в байтах) в контексте входящих (полученных) данных соединения сокета.
Валидные значения опции включают в себя любое положительное число, со значением по умолчанию, которое колеблется в зависимости от платформы и конфигурации ядра.
socket_send_size
(тип:int
)-
Указанный максимальный размер буфера (в байтах) в контексте исходящиз (отправленных) данных соединения сокета.
Валидные значения опции включают в себя любое положительное число, со значением по умолчанию, которое колеблется в зависимости от платформы и конфигурации ядра..
tcp_keepalive
(тип:bool
, по умолчанию:false
)- Включает или отключает функцию "`keep-alive`_" Протокол управления передачей (TCP), которая помогает определить, не перестала ли отвечать другая сторона, путём отправки проб узлу сети после периода ожидания, и закрытия или сохранения сокета, в зависимости от ответа (или его отсутствия).
tcp_nodelay
(тип:bool
, по умолчанию:false
)- Включает или отключает алогоритм "`no-delay`_" (алогоритм Нейгла) Протокол управления передачей (TCP), который является механизмом для улучшения проихводительности сетей путём снижения перенагрузки заголовков TPC, объединяя неколько небольших исходящих сообщений и отправляя их одновременно.
use_udp
(тип:bool
, по умолчанию:false
)-
Включает или отключает использование режима Протокол пользовательских датаграм (UDP) (вместо режима Протокол управления передачей (TCP)), где все операции исполняются в режиме "выстрелил и забыл"; после исполнение клиентом, не будет сделано ни одной попытки убедиться, что операция была получена или получила обратной воздействие.
Caution
Не все операции библиотек тестируются в этом режиме. Смешанные серверы TCP и UDP не разрешены.
verify_key
(тип:bool
, по умолчанию:false
)- Включает или отключает тестирование и верификацию для всех использованных ключей, чтобы зарантировать, что они валидны и подходят под используемый протокол.
- .. tip::
- Обратитесь к документации предопределённые константы расширения Memcached, чтобы узнать больше о доступных опциях.