简体   繁体   English

使用 Redis 缓存 Doctrine 2 查询结果为 Symfony 5

[英]Use Redis for caching Doctrine 2 queries and result in Symfony 5

I would like to use Redis 6.0.1 in my Symfony 5.0.8 project for caching Doctrine 2 queries and result.我想在我的Symfony 5.0.8项目中使用Redis 6.0.1来缓存Doctrine 2查询和结果。 I tried to configure Redis for Doctrine in cache.yaml and doctrine.yaml after added predis/predis package, but I'm not sure my configuration is correct.添加predis predis/predis doctrine.yaml后,我尝试在cache.yaml和doctrine.yaml中为Doctrine配置Redis,但我不确定我的配置是否正确。

doctrine.yaml : doctrine.yaml :

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                dbname: '%env(DATABASE_NAME)%'
                user: '%env(DATABASE_USER)%'
                password: '%env(DATABASE_PASSWORD)%'
                host: '%env(DATABASE_HOST)%'
                driver:  '%env(DATABASE_DRIVER)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

        metadata_cache_driver: ~

        query_cache_driver:
            type: pool
            id: doctrine.query_cache_pool

        result_cache_driver:
            type: pool
            id: doctrine.result_cache_pool

cache.yaml : cache.yaml

framework:
    cache:
        # Redis
        app: cache.adapter.redis
        default_redis_provider: redis://localhost

Does my configuration for Redis seem correct to you?我对 Redis 的配置对您来说是否正确? And how can I test if Redis works in my project?我如何测试 Redis 在我的项目中是否有效?

Thanks in advance提前致谢

I finally succeeded, I give the solution for those who would be in the same case as me:我终于成功了,我给那些和我一样情况的人解决方案:

cache.yaml:缓存.yaml:

framework:
    cache:
        app: cache.adapter.redis
        default_redis_provider: "redis://%env(REDIS_HOST)%:%env(REDIS_PORT)%"

        pools:
            doctrine.result_cache_pool:
                adapter: cache.adapter.redis

            doctrine.system_cache_pool:
                adapter: cache.adapter.redis

doctrine.yaml: doctrine.yaml:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                dbname: '%env(DATABASE_NAME)%'
                user: '%env(DATABASE_USER)%'
                password: '%env(DATABASE_PASSWORD)%'
                host: '%env(DATABASE_HOST)%'
                driver:  '%env(DATABASE_DRIVER)%'

    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                type: annotation
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

        metadata_cache_driver: ~

        query_cache_driver:
            type: pool
            pool: doctrine.system_cache_pool

        result_cache_driver:
            type: pool
            pool: doctrine.result_cache_pool

In a Doctrine Repository I created this function that I use in all repository functions:在 Doctrine 存储库中,我创建了这个 function,我在所有存储库函数中使用它:

protected function getQueryBuilder(): QueryBuilder
{
    return $this->createQueryBuilder('article')
                ->setCacheMode(Cache::MODE_NORMAL)
                ->setCacheable(true)
                ->setLifetime(300);
}

docker-compose.yaml: docker-compose.yaml:

version: "3.4"

services:
  php:
    ...
    depends_on:
      - redis

  redis:
    image: redis:6.0.1
    ports:
      - 6379:6379
    volumes:
      - ./docker/redis/redis.conf:/redis.conf
    command: [ "redis-server", "/redis.conf" ]

.env.local: .env.本地:

###> Redis ###
REDIS_HOST=redis
REDIS_PORT=6379
###> Redis ###

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM