• Модуль: cluster
  • Путь к файлу: ~/bitrix/modules/cluster/classes/general/redis.php
  • Класс: CClusterRedis
  • Вызов: CClusterRedis::saveConfig
static function saveConfig($servers) : void
{
	self::$arList = false;
	$isOnline = false;

	$content = " 'DESC']);
	while ($group = $clusterGroups->Fetch())
	{
		$defaultGroup = $groups[$group['ID']] = (int) $group['ID'];
	}

	foreach ($servers as $i => $server)
	{
		$isOnline |= ($server['STATUS'] == 'ONLINE');

		$groupID = (int) $server['GROUP_ID'];
		if (!array_key_exists($server['GROUP_ID'], $groups))
		{
			$groupID = $defaultGroup;
		}

		$content .= "t" . intval($i) . " => [n";
		$content .= "tt'ID' => " . EscapePHPString($server['ID']) . ",n";
		$content .= "tt'GROUP_ID' => " . $groupID . ",n";
		$content .= "tt'HOST' => '" . EscapePHPString($server['HOST']) . "',n";
		$content .= "tt'PORT' => " . intval($server['PORT']) . ",n";

		switch ($server['STATUS'])
		{
			case 'ONLINE':
				$content .= "tt'STATUS' => 'ONLINE',n";
				break;
			case 'OFFLINE':
				$content .= "tt'STATUS' => 'OFFLINE',n";
				break;
			default:
				$content .= "tt'STATUS' => 'READY',n";
				break;
		}

		$content .= "tt'MODE' => '" . $server['MODE'] . "',n";
		$content .= "tt'ROLE' => '" . $server['ROLE'] . "',n";
		$content .= "t],n";
	}

	$content .= "];n?>";

	file_put_contents($_SERVER['DOCUMENT_ROOT'] . BX_ROOT . '/modules/cluster/redis.php', $content);
	bx_accelerator_reset();

	self::$systemConfigurationUpdate = null;
	$cache = BitrixMainConfigConfiguration::getValue('cache');

	if ($isOnline)
	{
		if (
			!is_array($cache)
			|| !isset($cache['type'])
			|| !is_array($cache['type'])
			|| !isset($cache['type']['class_name'])
			|| !($cache['type']['class_name'] === 'CPHPCacheRedisCluster')
		)
		{
			BitrixMainConfigConfiguration::setValue('cache', [
				'type' => [
					'class_name' => 'CPHPCacheRedisCluster',
					'extension' => 'redis',
					'required_file' => 'modules/cluster/classes/general/redis_cache.php',
				],
				'failover' => Option::get('cluster', 'failower_settings'),
				'timeout' => Option::get('cluster', 'redis_timeoit'),
				'read_timeout' => Option::get('cluster', 'redis_read_timeout'),
				'persistent' => (Option::get('cluster', 'redis_persistent') == 'Y'),
			]);
			self::$systemConfigurationUpdate = true;
		}
	}
	else
	{
		if (
			is_array($cache)
			&& isset($cache['type'])
			&& is_array($cache['type'])
			&& isset($cache['type']['class_name'])
			&& ($cache['type']['class_name'] === 'CPHPCacheRedisCluster')
		)
		{
			BitrixMainConfigConfiguration::setValue('cache', null);
			self::$systemConfigurationUpdate = false;
		}
	}
}