在我的config_prod.yml
文件中,我有以下配置。我在哪里可以配置Redis驱动程序 - 例如unix socket(或主机),数据库号等选项?
doctrine:
orm:
metadata_cache_driver: redis
query_cache_driver: redis
result_cache_driver: redis
答案 0 :(得分:6)
@ katona.abel给出的例子不起作用,但引导我找到这个解决方案:
#services.yml
services:
redis_cache_service:
class: Doctrine\Common\Cache\RedisCache
calls:
- method: setRedis
arguments:
- '@redis'
redis:
class: Redis
public: false
calls:
- method: connect
arguments:
- '/var/run/redis/redis.sock' # or host/ip with port
- method: select
arguments:
- 13 # change database by index
#config_prod.yml
doctrine:
orm:
metadata_cache_driver:
type: service
id: redis_cache_service
result_cache_driver:
type: service
id: redis_cache_service
query_cache_driver:
type: service
id: redis_cache_service
答案 1 :(得分:5)
对于symfony 4.4 / 5,这是完成的过程,因为文档有些混乱。
您需要首先设置缓存池:
#config/packages/cache.yaml
framework:
cache:
default_redis_provider: 'redis://localhost' # or '%env(resolve:REDIS_URL)%'
pools:
doctrine.result_cache_pool:
adapter: cache.adapter.redis
然后将该池用于原则结果缓存,如下所示:
#config/packages/doctrine.yaml
doctrine:
...
orm:
result_cache_driver:
type: pool
pool: doctrine.result_cache_pool
答案 2 :(得分:2)
此配置应该有效
doctrine:
orm:
metadata_cache_driver:
type: redis
connection_id: <Redis connection service id>
host:<Redis host>
port:<Redis port>
password:<Redis password>
timeout:<Redis connection timeout>
database:<Redis database selection (integer)>
persistent:<Whether to use persistent connection or not (bool)>
参数信息here
更新
如果您需要为所有缓存提供相同的缓存,您可以定义服务并将其传递
doctrine_cache:
aliases:
redis_cache: my_redis_cache
providers:
my_redis_cache:
type: redis
connection_id: <Redis connection service id>
host:<Redis host>
port:<Redis port>
password:<Redis password>
timeout:<Redis connection timeout>
database:<Redis database selection (integer)>
persistent:<Whether to use persistent connection or not (bool)>
doctrine:
...
orm:
entity_managers:
default:
...
metadata_cache_driver:
type: service
id: redis_cache
query_cache_driver:
type: service
id: redis_cache
result_cache_driver:
type: service
id: redis_cache
答案 3 :(得分:0)
我注意到作者问的是redis,而不是predis,但我想为3.4.*
找到最简单的“开箱即用”方式,如果您只想快速入门的话:
doctrine:
orm:
default_entity_manager: default
entity_managers:
default:
metadata_cache_driver:
type: predis
host: '%app.redis.host%'
port: '%app.redis.port%'
database: 1
result_cache_driver:
cache_provider: doctrine.orm.default_metadata_cache
query_cache_driver:
cache_provider: doctrine.orm.default_metadata_cache
这需要predis客户端:
$ composer require predis/predis
现在会发生什么?对于学说的元数据缓存,我们用内置的Predis\Client
包装了Doctrine\Common\Cache\PredisCache
。结果和查询缓存驱动程序配置为元数据缓存驱动程序的别名(实际上是缓存提供程序的别名),因此它们都使用相同的数据库,主机和端口。如果您通过bin/console
清除元数据缓存或通过redis-cli直接调用flushdb
,则结果和查询的缓存也将被清除。
此解决方案不需要任何新服务。