Symfony 条令缓存基础

Symfony 条令缓存基础,symfony,caching,doctrine-orm,Symfony,Caching,Doctrine Orm,我不理解条令缓存设置的默认行为和基本含义 如果我发出一个基本查询(使用默认的symfony&doctor配置),如 这是以任何方式缓存的吗? 1.1关于$queryBuilder->…->getResult()?不触摸->useXXXCache(),这是缓存吗? 1.2那么,我是否正确理解只有通过$queryBuilder->…->useXXXCache()->getResult()才能启用缓存 默认情况下,所有3个缓存(元数据、查询和结果)都设置为array。这意味着,每个新请求都有自己的缓存

我不理解条令缓存设置的默认行为和基本含义

  • 如果我发出一个基本查询(使用默认的symfony&doctor配置),如

    这是以任何方式缓存的吗?

    1.1关于
    $queryBuilder->…->getResult()
    ?不触摸
    ->useXXXCache()
    这是缓存吗?

    1.2那么,我是否正确理解只有通过
    $queryBuilder->…->useXXXCache()->getResult()才能启用缓存

  • 默认情况下,所有3个缓存(元数据、查询和结果)都设置为
    array
    。这意味着,每个新请求都有自己的缓存

    好的,如果我使用这个设置,并且在使用缓存查询的请求期间不执行任何刷新和持久化,那么我可以确保永远不会得到过时的结果?因为写入发生在另一个请求中

  • 默认情况下是否可以使用缓存(结果或查询)?所以不必设置
    $query->useResultCache(true)

  • 如果我发出一个基本查询(使用默认的symfony&document配置),比如
    $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()