Php symfony2和snc redis:如何根据环境禁用它?
我正在使用snc redis缓存我的条令查询,一切都很好 当我在一个团队中工作时,我决定将redis服务器放在远程机器上,但它在向服务器写入字节时遇到了“连接错误”[tcp://xxx.xxx.xxx.xxx:6379" 因此,我正在考虑只为生产服务器部署redis,并在我们的开发中禁用它。问题是对于每个存储库,我们使用predis查询缓存功能,这会导致问题,因为没有可用的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:
# 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服务器…因此,我认为您需要安装一个,或者在不存在时根本不使用它。抱歉!