如何在Symfony应用程序中为教义配置Redis缓存

kub*_*lav 2 redis symfony doctrine-orm

在我的config_prod.yml文件中,我有以下配置。我在哪里可以配置Redis驱动程序-选项,例如unix套接字(或主机),数据库号等?

doctrine:
    orm:
        metadata_cache_driver: redis
        query_cache_driver: redis
        result_cache_driver: redis
Run Code Online (Sandbox Code Playgroud)

kub*_*lav 7

@ 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
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)


nac*_*bre 6

对于 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
Run Code Online (Sandbox Code Playgroud)

然后将这个池用于学说结果缓存,如下所示:

#config/packages/doctrine.yaml

doctrine:
  ...
  orm:
    result_cache_driver:
      type: pool
      pool: doctrine.result_cache_pool
Run Code Online (Sandbox Code Playgroud)