Memcached в 1С-Битрикс
Memcached — один из поддерживаемых бэкендов для кеширования и key-value хранения данных в 1С-Битрикс. Платформа использует PHP-расширение memcached (отличается от memcache — это два разных расширения PHP).
Классы для работы с Memcached
В модуле main определены следующие классы:
\Bitrix\Main\Data\MemcachedConnection— класс подключения к Memcached (наследуется отNosqlConnection). Расположен в файле/bitrix/modules/main/lib/Data/MemcachedConnection.php.\Bitrix\Main\Data\CacheEngineMemcached— класс-движок кеширования для Memcached. Расположен в файле/bitrix/modules/main/lib/Data/CacheEngineMemcached.php.\Bitrix\Main\Data\Configurator\MemcachedConnectionConfigurator— конфигуратор подключения.
Методы класса MemcachedConnection
__construct(...)— конструкторconnectInternal()— внутреннее подключение к серверуdisconnectInternal()— отключениеget($key)— получение значения по ключуset($key, $value)— установка значения
Настройка подключения Memcached в .settings.php
Подключение настраивается в секции connections файла /bitrix/.settings.php:
'memcached' => [
'className' => \Bitrix\Main\Data\MemcachedConnection::class,
'host' => '127.0.0.1',
'port' => 11211,
'persistent' => true,
'connectionTimeout' => 1000,
'serializer' => \Memcached::SERIALIZER_PHP,
],
Параметры:
host— хост сервера Memcached (по умолчаниюlocalhost)port— порт (по умолчанию11211)persistent— использовать постоянный идентификаторbx_cache(по умолчаниюtrue)connectionTimeout— таймаут подключения в миллисекундах (по умолчанию1000)serializer— сериализаторMemcached::OPT_SERIALIZER, например\Memcached::SERIALIZER_PHP
Кластер Memcached
Для подключения кластера вместо host и port укажите параметр servers — массив серверов:
'memcached.cluster' => [
'className' => \Bitrix\Main\Data\MemcachedConnection::class,
'servers' => [
['host' => '10.0.0.20', 'port' => 11211, 'weight' => 1],
['host' => '10.0.0.21', 'port' => 11211, 'weight' => 1],
],
'persistent' => true,
'connectionTimeout' => 1000,
'serializer' => \Memcached::SERIALIZER_PHP,
],
Каждый элемент массива servers может содержать параметры host, port и weight (вес, по умолчанию 1). Чем больше weight, тем больше запросов получает сервер.
Использование Memcached для кеширования
Memcached можно использовать как движок кеширования в секции cache файла .settings.php:
'cache' => [
'value' => [
'type' => [
'class_name' => '\\Bitrix\\Main\\Data\\CacheEngineMemcached',
'extension' => 'memcached',
],
'memcached' => [
'host' => '127.0.0.1',
'port' => '11211',
],
'sid' => $_SERVER['DOCUMENT_ROOT'] . '#01',
],
],
Методы CacheEngineMemcached
getConnectionName()— имя подключенияgetConnectionClass()— класс подключенияconfigure(array $config)— конфигурация движкаset($key, $ttl, $value)— запись значения в кешdel($key)— удаление значенияsetNotExists($key, $ttl, $value)— запись если ключ не существуетdeleteBySet($key, $prefix)— удаление по набору
Отличие Memcache от Memcached
В 1С-Битрикс поддерживаются оба расширения PHP:
- Memcache — класс
\Bitrix\Main\Data\MemcacheConnection, расширение PHPmemcache, используетсяpconnectдля постоянных соединений. - Memcached — класс
\Bitrix\Main\Data\MemcachedConnection, расширение PHPmemcached(более современное и функциональное), поддерживаетserializerиOPT_SERIALIZER.