php Doctrine的二级缓存不显示新物品

d6kp6zgx  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(74)

我正在使用Symfony 6.2.12和Doctrine 2.15.3,并尝试实现二级缓存。探查器栏显示预期的缓存命中,因此这是有效的。但是,当我向缓存实体添加新项时(使用EntityManager),问题就出现了。该高速缓存似乎并不知道新的项,findBy()仍然返回我添加它们之前的旧数组。请注意,我没有修改任何现有的实体,列表应该只是有更多的项目。
我的doctrine.yaml

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
        second_level_cache:
            enabled: true
            regions:
                append_only:
                    lifetime: 8640000
                    cache_driver:
                        type: service
                        id: cache.app

字符串
我选择READ_ONLY作为实体,因为现有条目永远不会更改。(我也用NONSTRICT_READ_WRITEREAD_WRITE进行了测试,但没有改进。)当我删除ORM\Cache属性时,新的项自然会出现在列表中,所以这肯定是该高速缓存的问题。

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: LogRepository::class)]
#[ORM\Cache(usage: "READ_ONLY", region: "append_only")]
class Log
{


在控制器中,我从LogRepository(默认的,从ServiceEntityRepository扩展)中检索项目数组:

$logs = $logRepository->findBy(
    $criteria,
    ['id' => 'DESC'],
    $limit,
    $offset
);


这是配置问题吗?
当然,每当我添加一个新项时,我可以驱逐整个缓存区域,然后列表是最新的:

/** @var \Doctrine\ORM\Cache $cache */
$cache = $this->entityManager->getCache();
$cache->evictEntityRegion(Log::class);


但这不是我对READ_ONLY缓存的理解,在READ_ONLY缓存中,您应该能够向缓存区域添加项目。

brgchamk

brgchamk1#

它现在进行了一些修改:
第一个月

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App
        second_level_cache:
            enabled: true
            
            region_cache_driver:
                type: service
                id: cache.app
            regions:
                append_only:
                    lifetime: 8640000

字符串
对于实体

#[ORM\Cache(usage: "NONSTRICT_READ_WRITE", region: "append_only")]


NONSTRICT_READ_WRITE代替READ_ONLY

相关问题