stfalcon-studio/doctrine-redis-cache-bundle

为 doctrine 缓存池添加自定义命名空间。

3.1.0 2024-05-31 15:51 UTC

This package is auto-updated.

Last update: 2024-08-31 00:27:57 UTC


README

📦 为 doctrine 缓存池添加自定义命名空间。

Scrutinizer Quality Score Build Status CodeCov License Latest Stable Version Total Downloads StyleCI

此包解决的问题

当您使用 Redis 作为 Doctrine 查询/元数据/二级 缓存的提供者时,Doctrine 为每个缓存项生成唯一的键。当您更改数据库模式时,创建一个新的迁移(Doctrine 迁移),然后将其部署到生产环境,您必须在部署后清理 Doctrine 缓存。Doctrine 有清理任何类型缓存的控制台命令,并且它们运行良好。但是,如果在缓存刷新期间您已经运行了脚本(长时间运行的控制台/cron 任务或消费者),它仍然会使用旧的方案信息,这可能会与您的新的方案冲突。在这种情况下,此脚本可以重新生成缓存(因为它已经被刷新),使用旧的方案元数据、查询、结果等。

为防止此问题,我们为每个选定的缓存池添加一个自定义的 命名空间。此 命名空间 是最新迁移版本的名称。例如,您将项目的第一个版本部署到生产环境。最新的迁移版本是 1,因此缓存中的所有键都将有前缀 [1](例如,[1]hash_by_doctrine)。然后您修改您的方案,生成一个新的迁移(版本 2),并将其部署到生产环境。旧的运行脚本仍然会使用并生成前缀为 [1] 的键,但新的脚本将开始使用新的前缀 [2],不会与先前的前缀冲突。

之后,您可以停止或重新运行旧脚本。重新运行后,它们将使用新的前缀,您可以使用先前的前缀清理缓存条目。

安装

composer req stfalcon-studio/doctrine-redis-cache-bundle

检查 config/bundles.php 文件

默认情况下,Symfony Flex 会将此包添加到 config/bundles.php 文件。但是在您在包安装时忽略了 contrib-recipe 的情况下,它不会被添加。在这种情况下,请手动添加包。

# config/bundles.php

return [
    // Other bundles...
    StfalconStudio\DoctrineRedisCacheBundle\StfalconStudioDoctrineRedisCacheBundle::class => ['all' => true],
    // Other bundles...
];

可能的缓存池配置示例

framework:
    cache:
        default_redis_provider: snc_redis.default
        pools:
            doctrine.result_cache_pool:
                adapter: cache.adapter.redis
                provider: snc_redis.doctrine_result_cache
            doctrine.metadata_cache_pool:
                adapter: cache.adapter.redis
                provider: snc_redis.doctrine_metadata_cache
            doctrine.query_cache_pool:
                adapter: cache.adapter.redis
                provider: snc_redis.doctrine_query_cache

包配置

stfalcon_studio_doctrine_redis_cache:
    cache_pools:
        - 'doctrine.query_cache_pool'
        - 'doctrine.metadata_cache_pool'
        - 'doctrine.result_cache_pool'

贡献

阅读 CONTRIBUTING 文件。