symfony2和snc-redis:如何根据environement禁用它?

时间:2015-05-06 15:59:31

标签: php symfony redis

我正在使用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

2 个答案:

答案 0 :(得分:0)

您可以根据环境为配置文件夹中的特定文件添加不同的配置。

如果将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();
}

我希望它有所帮助。

答案 1 :(得分:0)

我通常只为prod环境启用任何类型的缓存。所以我建议你离开config.yml,不要有任何特定的配置,只有snc_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

<强> config_prod.yml

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

希望这个帮助