Symfony 条令缓存基础
我不理解条令缓存设置的默认行为和基本含义Symfony 条令缓存基础,symfony,caching,doctrine-orm,Symfony,Caching,Doctrine Orm,我不理解条令缓存设置的默认行为和基本含义 如果我发出一个基本查询(使用默认的symfony&doctor配置),如 这是以任何方式缓存的吗? 1.1关于$queryBuilder->…->getResult()?不触摸->useXXXCache(),这是缓存吗? 1.2那么,我是否正确理解只有通过$queryBuilder->…->useXXXCache()->getResult()才能启用缓存 默认情况下,所有3个缓存(元数据、查询和结果)都设置为array。这意味着,每个新请求都有自己的缓存
$queryBuilder->…->getResult()
?不触摸->useXXXCache()
,这是缓存吗?
1.2那么,我是否正确理解只有通过$queryBuilder->…->useXXXCache()->getResult()才能启用缓存
array
。这意味着,每个新请求都有自己的缓存
好的,如果我使用这个设置,并且在使用缓存查询的请求期间不执行任何刷新和持久化,那么我可以确保永远不会得到过时的结果?因为写入发生在另一个请求中$query->useResultCache(true)
$em->getRepository(MyEntity::class)->findAll()
这是以任何方式缓存的吗
它不会缓存,但检索到的实体由实体管理器管理(在脚本的生命周期内)。这意味着,例如,如果findAll()
调用为您提供ID为1、2、3的实体,并且您随后将调用find(1)
,则不会触发新的数据库查询
但是,如果您正在执行DQL查询(直接或通过查询生成器),它将始终触发DB查询,即使结果集相同。至少已经被管理的实体不需要再补充水分了
1.1关于$queryBuilder->…->getResult()
?如果不触摸->useXXXCache()
,这是缓存的吗
没有
1.2那么,我是否正确理解只有通过$queryBuilder->…->useXXXCache()->getResult()才能启用缓存
对
默认情况下,所有3个缓存(元数据、查询和结果)都设置为数组。这意味着,每个新请求都有自己的缓存
对。您可以轻松设置不同的缓存,例如APCu、Redis或Memcache。但是,建议仅在生产环境中使用这些
好的,如果我使用这个设置,并且在使用缓存查询的请求期间不执行任何刷新和持久化,那么我可以确保永远不会得到过时的结果?因为写入发生在另一个请求中
如果您担心并发请求会弄乱数据,请使用事务和锁定
默认情况下是否可以使用缓存(结果或查询)?所以不必设置$query->useResultCache(true)
没有。答案对您有帮助吗?如果没有,你能提供一个评论,告诉什么是不清楚的?否则,请看一看
$em->getRepository(MyEntity::class)->findAll()