【问题标题】:Symfony: Clear doctrine cacheSymfony2 学说清除缓存
【发布时间】:2012-08-03 07:34:32
【问题描述】:

我需要清除Symfony 2 中的doctrine's 缓存。

命令行中必须有某种方式清除缓存

或者我应该在哪里找到并删除属于缓存的文件?

【问题讨论】:

  • rm -rf app/cache/* 没有帮助?
  • 这个答案有帮助吗?如果否,请尝试使用应用程序/控制台缓存清除完整缓存:清除
  • @thecatontheflat - 请注意,原则缓存通常存储在 apc 中而不是文件系统中,因此删除缓存文件无济于事。
  • @amitchhajer - 请注意一般的app/console cache:clear 仅适用于 symfony (app) 缓存。我认为它不会清除学说缓存。

标签: php caching symfony doctrine


【解决方案1】:

也许这有点晚了,但就我而言,学说并没有在生产中生成代理类,为此我将 auto_generate_proxy_classes 更改为 true:

#symfony2&3 app/config/config.yml
#symfony4 config/packages/doctrine.yaml (by default true since 4.2)

doctrine:
    orm:
        auto_generate_proxy_classes: true #"%kernel.debug%"

【讨论】:

    【解决方案2】:
    app/console
    

    将列出您如何做到这一点

     app/console doctrine:cache:clear-metadata 
     app/console doctrine:cache:clear-query  
     app/console doctrine:cache:clear-result 
    

    对于 symfony 3+:

     php bin/console
    

    和命令列表(用于从项目目录复制/过去):

     php bin/console doctrine:cache:clear-metadata 
     php bin/console doctrine:cache:clear-query  
     php bin/console doctrine:cache:clear-result
    

    【讨论】:

    • 顺便说一下,如果您使用 mongodb,例如,您可以执行 'app/console dictionary:mongodb:cache:clear-metadata' 或只执行 'app/console dictionary',您将看到所有可用选项
    • 请注意,您始终可以使用 app/console list 显示所有命令或使用 app/console list doctrine 仅显示 'doctrine' 命名空间中的命令
    • 我在 prod 环境中尝试过doctrine:cache:clear-result。它不工作。我也试过bin/doctrine orm:clear-cache:result。它也不起作用。我正在使用memcache
    【解决方案3】:

    我知道这篇文章的标题是 Symfony 2,但对于那些来自 google 的人来说,如果你有 Symfony 3+,它会是:

    bin/console
    

    相对于:

    app/console
    

    【讨论】:

      【解决方案4】:

      如果你使用 APC,你也可以直接调用代码

      <?php
      $deleted = apc_clear_cache() && apc_clear_cache('user');
      

      在同一服务器上的 php 页面中。这就是 Antho 答案中的 deleteAll() 方法所做的,但您不依赖于 Doctrine Classes。顺便说一句:将刷新完整的缓存 - 以防万一您将其用于非 Doctrine 的东西。

      【讨论】:

        【解决方案5】:

        我以为我对学说结果缓存发疯了 - 最后我不得不重新启动 memcached。

        【讨论】:

          【解决方案6】:

          如果您想在您的代码中执行此操作(来自Doctrine's documentation):

          如果您只是想删除所有缓存条目,您可以使用 deleteAll() 方法。

              <?php
              $cacheDriver = new \Doctrine\Common\Cache\ArrayCache();
              $deleted = $cacheDriver->deleteAll();
          

          【讨论】:

          • 缓存刷新有什么区别?
          • 这段代码创建了一个新的缓存驱动。它应该利用配置中的当前 QueryCacheProfile 或结果缓存实现。如果使用例如,它不会神奇地清除应用程序中的缓存。 Redis 或 Memcached。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-13
          • 1970-01-01
          • 1970-01-01
          • 2015-07-16
          • 1970-01-01
          相关资源
          最近更新 更多