我正在使用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_WRITE
和READ_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
缓存中,您应该能够向缓存区域添加项目。
1条答案
按热度按时间brgchamk1#
它现在进行了一些修改:
第一个月
字符串
对于实体
型
用
NONSTRICT_READ_WRITE
代替READ_ONLY
。