• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/data/cache.php
  • Класс: BitrixMainDataCache
  • Вызов: Cache::createCacheEngine
static function createCacheEngine($params = [])
{
	static $cacheEngine = null;
	if ($cacheEngine)
	{
		return clone $cacheEngine;
	}

	// Events can't be used here because events use cache

	$cacheType = 'files';
	$v = ConfigConfiguration::getValue('cache');
	if ($v != null && isset($v['type']) && !empty($v['type']))
	{
		$cacheType = $v['type'];
	}

	if (is_array($cacheType))
	{
		if (isset($cacheType['class_name']))
		{
			if (!isset($cacheType['extension']) || extension_loaded($cacheType['extension']))
			{
				if (isset($cacheType['required_file']) && ($requiredFile = MainLoader::getLocal($cacheType['required_file'])) !== false)
				{
					require_once($requiredFile);
				}

				if (isset($cacheType['required_remote_file']))
				{
					require_once($cacheType['required_remote_file']);
				}

				$className = $cacheType['class_name'];
				if (class_exists($className))
				{
					$cacheEngine = new $className($params);
				}
			}
		}
	}
	else
	{
		switch ($cacheType)
		{
			case 'redis':
				$cacheEngine = new CacheEngineRedis($params);
				break;
			case 'memcached':
				$cacheEngine = new CacheEngineMemcached($params);
				break;
			case 'memcache':
				$cacheEngine = new CacheEngineMemcache($params);
				break;
			case 'apc':
			case 'apcu':
				$cacheEngine = new CacheEngineApc($params);
				break;
			case 'files':
				$cacheEngine = new CacheEngineFiles($params);
				break;
			default:
				$cacheEngine = new CacheEngineNone();
				break;
		}
	}

	if ($cacheEngine == null)
	{
		$cacheEngine = new CacheEngineNone();
		trigger_error('Cache engine is not found', E_USER_WARNING);
	}

	if (!$cacheEngine->isAvailable())
	{
		$cacheEngine = new CacheEngineNone();
		trigger_error('Cache engine is not available', E_USER_WARNING);
	}

	return clone $cacheEngine;
}