NoSQL

В рамках NoSQL-подхода Bitrix Framework поддерживает работу с key-value хранилищами:

  • Redis — для кеширования, управления сессиями и обработки очередей задач,

  • Memcached — только для кеширования данных.

Настройка Redis

  1. Установите расширение Redis для PHP.

  2. Откройте файл /bitrix/.settings.php.

  3. Добавьте новое подключение в секцию connections:

'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,
        ]
        

Разные подключения Redis — custom.redis и custom2.redis — можно использовать для разных целей или распределения нагрузки.

Особенности Redis cluster

Redis поддерживает два подхода к организации кластера.

  • Мультимастерная конфигурация — Multi-Master. Несколько серверов Redis работают как равноправные мастер-узлы и могут принимать запись. Каждый мастер-узел может иметь собственные реплики — слейвы.

  • Традиционная конфигурация — Master-Slave. Все операции записи направляются на единственный мастер-узел. Слейвы будут копировать с него данные и обслуживать запросы на чтение.

Как настроить Redis cluster в режиме Multi-Master

  1. Укажите все мастер-узлы в массиве servers.

  2. Задайте параметры кластера.

// 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,
                            ],
                        ],
                    ],
                ]
            ] 
        ];
        
  • serializer — определяет формат хранения данных,

  • persistent — управляет типом соединения,

  • failover — определяет поведение при сбое,

  • timeout — задает время ожидания соединения в секундах,

  • read_timeout — задает время ожидания ответа после соединения в секундах.

Как настроить Redis cluster в режиме Master-Slave

  1. Укажите основной сервер, который будет обрабатывать записи.

  2. Redis обнаружит и задействует подключенные слейвы без дополнительных настроек.

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

Как получить и использовать соединение с Redis

Bitrix Framework предоставляет два способа взаимодействия с Redis:

/**
         * @var \Bitrix\Main\Data\RedisConnection $connection
         */
        $connection = \Bitrix\Main\Application::getConnection('my-redis');
        $connection->set('foo', 'bar');
        $connection->get('foo');
        
        /**
         * Можно получить объект подключения напрямую
         * 
         * @var \Redis
         */
        $resource = $connection->getResource();
        $resource->setnx('foo', 'bar');
        

Для большинства задач подходит RedisConnection— этот способ безопаснее и интегрирован с фреймворком. Прямой доступ к методам Redis через getResource() нужен только для специфичных операций, недоступных через стандартный API.

Настройка Memcached

  1. Установите расширение Memcached для PHP.

  2. Откройте файл /bitrix/.settings.php.

  3. Добавьте новое подключение в секцию connections:

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

Особенности Memcached cluster

Чтобы распределить нагрузку между несколькими серверами Memcached, укажите их в параметре servers. Чем больше weight сервера, тем больше запросов он будет получать. Для равномерного распределения задайте одинаковые значения для всех серверов:

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

Как получить и использовать соединение с Memcached

Bitrix Framework предлагает два подхода для работы с Memcached:

/**
         * @var \Bitrix\Main\Data\MemcachedConnection $connection
         */
        $connection = \Bitrix\Main\Application::getConnection('custom.memcached');
        $connection->set('foo', 'bar');
        $connection->get('foo');
        
        /**
         * Можно получить объект подключения напрямую
         * 
         * @var \Memcached
         */
        $resource = $connection->getResource();
        $resource->flush();
        

Для обычного кеширования используйте MemcachedConnection. Прямой доступ через getResource() позволяет использовать нативные методы Memcached и выполнять специфичные операции — такие как flush().

Предыдущая
Следующая