Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php symfony2和snc redis:如何根据环境禁用它?_Php_Symfony_Redis - Fatal编程技术网

Php symfony2和snc redis:如何根据环境禁用它?

Php symfony2和snc redis:如何根据环境禁用它?,php,symfony,redis,Php,Symfony,Redis,我正在使用snc redis缓存我的条令查询,一切都很好 当我在一个团队中工作时,我决定将redis服务器放在远程机器上,但它在向服务器写入字节时遇到了“连接错误”[tcp://xxx.xxx.xxx.xxx:6379" 因此,我正在考虑只为生产服务器部署redis,并在我们的开发中禁用它。问题是对于每个存储库,我们使用predis查询缓存功能,这会导致问题,因为没有可用的redis服务 以下是我的配置: snc_redis: # configure predis as client clien

我正在使用snc redis缓存我的条令查询,一切都很好

当我在一个团队中工作时,我决定将redis服务器放在远程机器上,但它在向服务器写入字节时遇到了“连接错误”[tcp://xxx.xxx.xxx.xxx:6379"

因此,我正在考虑只为生产服务器部署redis,并在我们的开发中禁用它。问题是对于每个存储库,我们使用predis查询缓存功能,这会导致问题,因为没有可用的redis服务

以下是我的配置:

snc_redis:
# configure predis as client
clients:
    default:
        type: predis
        alias: default
        dsn: "redis://%redis_url%"
    doctrine:
        type: predis
        alias: doctrine
        dsn: "redis://%redis_url%"
# configure doctrine caching
doctrine:
    metadata_cache:
        client: doctrine
        entity_manager: default
        document_manager: default
    result_cache:
        client: doctrine
        entity_manager: [default]
        namespace: "doctrine_result_cache_%kernel.environment%_"
    query_cache:
        client: doctrine
        entity_manager: default

根据环境的不同,您可以将不同的配置和特定的文件放在配置文件夹中

如果将redis配置放在config_prod.yml而不是config.yml中,则仅在prod环境中有效

您还可以创建另一个名为config_yourenv.yml的文件,并从不同的前端控制器加载它

在app.php中:

require_once __DIR__.'/../app/AppKernel.php';
//require_once __DIR__.'/../app/AppCache.php';

// Change the environment you load if want.
$kernel = new AppKernel('yourenv', false);
如果要排除捆绑包的全部负载,请在AppKernel.php上添加以下内容:

if (in_array($this->getEnvironment(), array('yourenv')) {
    $bundles[] = new Path\To\SncRedisBundle();
}

我希望它能有所帮助。

我通常只为
prod
环境启用任何类型的缓存。因此,我建议您将config.yml保留在没有任何特定配置的情况下,只保留snc\u redis捆绑包的基本定义

例如:

config.yml

snc_redis:
# configure predis as client
clients:
    default:
        type: predis
        alias: default
        dsn: "redis://%redis_url%"

# Standard Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: "%kernel.root_dir%/data/data.db3"
        # path:     "%database_path%"

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
snc_redis:
# configure predis as client
clients:
    default:
        type: predis
        alias: default
        dsn: "redis://%redis_url%"
    doctrine:
        type: predis
        alias: doctrine
        dsn: "redis://%redis_url%"
# configure doctrine caching
doctrine:
    metadata_cache:
        client: doctrine
        entity_manager: default
        document_manager: default
    result_cache:
        client: doctrine
        entity_manager: [default]
        namespace: "doctrine_result_cache_%kernel.environment%_"
    query_cache:
        client: doctrine
        entity_manager: default
config_prod.yml

snc_redis:
# configure predis as client
clients:
    default:
        type: predis
        alias: default
        dsn: "redis://%redis_url%"

# Standard Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        host:     "%database_host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: "%kernel.root_dir%/data/data.db3"
        # path:     "%database_path%"

    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        auto_mapping: true
snc_redis:
# configure predis as client
clients:
    default:
        type: predis
        alias: default
        dsn: "redis://%redis_url%"
    doctrine:
        type: predis
        alias: doctrine
        dsn: "redis://%redis_url%"
# configure doctrine caching
doctrine:
    metadata_cache:
        client: doctrine
        entity_manager: default
        document_manager: default
    result_cache:
        client: doctrine
        entity_manager: [default]
        namespace: "doctrine_result_cache_%kernel.environment%_"
    query_cache:
        client: doctrine
        entity_manager: default

希望获得此帮助

存储库内的predis查询缓存调用如何?如果您在存储库中使用redis,则必须有一台redis服务器。我想,在测试环境中,您可以安装一台本地服务器,而不是远程服务器,并维护单独的配置。或者可以尝试捕获以检查redis服务器是否可用。我们使用的是remote redis服务器,没有本地实例。try/catch可能是一个钩子,但这不是真正干净的代码。我同意,但我认为没有办法模拟redis服务器…因此,我认为您需要安装一个,或者在不存在时根本不使用它。抱歉!