118  /  382
Справочник

Подключения к Redis, Memcache

Просмотров: 36239
Дата последнего изменения: 30.09.2024
Роберт Басыров
Сложность урока:
3 уровень - средняя сложность. Необходимо внимание и немного подумать.
1
2
3
4
5
Недоступно в лицензиях:
Ограничений нет

Для создания подключения в файле настроек bitrix/.settings.php, необходимо добавить в секцию connections именованное подключение.

Redis

Убедитесь, что у вас установлено расширение Redis для работы через PHP.

Обычное подключение:

'connections' => [
	'value' => [
		'default' => [
			'className' => \Bitrix\Main\DB\MysqliConnection::class,
			//... настройки существующего подключения в БД
		],
		'custom.redis' => [
			'className' => \Bitrix\Main\Data\RedisConnection::class,
			'port' => 6379,
			'host' => '127.0.0.1',
			'serializer' => \Redis::SERIALIZER_IGBINARY,
		],
		'custom2.redis' => [
			'className' => \Bitrix\Main\Data\RedisConnection::class,
			'port' => 6379,
			'host' => '127.0.0.4',
			'serializer' => \Redis::SERIALIZER_IGBINARY,
		],
	],
	'readonly' => true,
]

Про настройки вариантов serializer можно прочитать в официальной документации.

Кластер

Отличие от обычной конфигурации заключается лишь в servers дополнительных опциях: serializer, persistent, failover, timeout, read_timeout. Про них можно прочитать в официальной документации.

Redis в режиме cluster может быть настроен двумя способами:

  1. Мультимастер кластер: N мастеров (и могут быть слейвы у каждого).
  2. Обычный кластер: 1 мастер и N слейвов

Redis cluster в режиме мультимастер, указываются параметры всех мастеров:

// bitrix/.settings.php
return [
//...        
	'session' => [
		'value' => [
			'mode' => 'default',
			'handlers' => [
				'general' => [
					'type' => 'redis',   
					'servers' => [
						[
							'port' => 6379,
							'host' => '127.0.0.1',
						],
						[
							'port' => 6379,
							'host' => '127.0.0.2',
						],
						[
							'port' => 6379,
							'host' => '127.0.0.3',
						],
						'serializer' => \Redis::SERIALIZER_IGBINARY,
						'persistent' => false,
						'failover' => \RedisCluster::FAILOVER_DISTRIBUTE,
						'timeout' => null,
						'read_timeout' => null,
					],
				],           
			],
		]                   
	] 
];

Redis cluster в режиме 1 мастер + N слейвов. Указываются только параметры мастера блок с опциями опускается:

return [
	'session' => [
		'value' => [
			'mode' => 'default',
			'handlers' => [
				'general' => [
					'type' => 'redis',
					'servers' => [
						[
							'port' => '30015',
							'host' => '127.0.0.1'
						],
					],
				],
			],
		],
	],
];

Использование

Чтобы получить экземпляр соединения, достаточно обратиться по имени соединения, используя метод \Bitrix\Main\Application::getConnection.

/** @var \Redis $redisConnection **/
$redisConnection = \Bitrix\Main\Application::getConnection('custom.redis')->getResource();
$redisConnection->setnx('foo', 'bar');

Memcache

Убедитесь, что у вас установлено расширение Memcache для работы через PHP.

Обычное подключение

'connections' => [
	'value' => [
		'default' => [
			'className' => \Bitrix\Main\DB\MysqliConnection::class,
			//... настройки существующего подключения в БД
		],
		'custom.memcache' => [
			'className' => \Bitrix\Main\Data\MemcacheConnection::class,
			'port' => 11211,
			'host' => '127.0.0.1',
		],
      'custom42.memcache' => [
        'className' => \Bitrix\Main\Data\MemcacheConnection::class,
        'port' => 6379,
        'host' => '127.0.0.4',
		],
	],
	'readonly' => true,
]

Кластер

Если необходимо создать кластер из memcache серверов, то достаточно добавить настройку servers.

'connections' => [
	'value' => [
		'default' => [
			'className' => \Bitrix\Main\DB\MysqliConnection::class,
			//... настройки существующего подключения в БД
				],
		'custom.memcache' => [
			'className' => \Bitrix\Main\Data\MemcacheConnection::class,
			'servers' => [
				[
				'port' => 11211,
				'host' => '127.0.0.1',
				'weight' => 1, //про настройку weight читайте внимательно в документации по memcahe 
				],
				[
				'port' => 11211,
				'host' => '127.0.0.2',
				'weight' => 1, //про настройку weight читайте внимательно в документации по memcahe
				],
			],
		],
	],
	'readonly' => true,
]

Использование

Чтобы получить экземпляр соединения, достаточно обратиться по имени соединения, используя метод \Bitrix\Main\Application::getConnection.

/** @var \Memcache $memcacheConnection **/
$memcacheConnection = \Bitrix\Main\Application::getConnection('custom.memcache')->getResource();
$memcacheConnection->set('foo', 'bar');

11
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии