在Symfony中清除缓存:`cache:clear`还是`rm -rf`?

40
"./bin/console cache:clear --env=prod" 和 "rm -rf var/cache/prod/*" 之间有什么区别?控制台命令非常缓慢,而 Bash 命令很快。那么,为什么要使用 "cache:clear" 而不是 "rm" 呢?请注意,两者的意思不能改变。

6
到处都可以看到建议使用 php app/console blahblahphp app/console make coffeephp app/console make my dreams come true,但是"官方"最佳方法应该是:php app/console doctrine:cache:clear-metadata && php app/console doctrine:cache:clear-query && php app/console doctrine:cache:clear-result。不要相信别人说的话。我曾经使用过Apache作为反向代理,然后使用了Varnish和Nginx,并且我从Symfony 2.3升级到了现在的3版本,但它从来没有正常工作过。从未。实际有效的解决方案是什么?请看我下一个评论。 - Olivier Pons
12
实际和有效的解决方案是什么?rm -rf ./app/cache/dev/*; rm -rf ./app/cache/prod/*,然后重新启动您的Web服务器,无论它是什么,以清空缓存。这是唯一有效的方法。不是最好的,也不是“遵循最佳实践,相信圣诞老人,相信完美”,但它确实起作用。我已经清除了我的缓存,而且它有效。我对“只使用php app/console”的炒作感到非常厌倦。如果您使用Windows,您总会以这种方式结束,这是一个四岁Symfony用户的建议。 - Olivier Pons
同意 rm -rf 完美运行的说法。唯一的问题是无法删除正在使用的某些文件,我通过多次运行该命令来解决这个问题。 - E Ciotti
3个回答

50

cache:clear 命令会清除之前创建的缓存条目,但也会进行缓存预热。因此,应用程序在加载时会很快,因为缓存已经被预填充。

另一方面,rm -rf 只完成了其中一部分任务。在执行该命令后,第一次加载应用程序时可能会出现性能影响。

我还想指出另一件事:权限。例如,如果您以 root 用户身份登录,并且没有通过 setfacl(或任何其他方法)设置访问权限,则 cache:clear 很可能会创建属于 root 的缓存条目。这可能会在未来引起问题。

希望这有点帮助...


13
"

"cache:clear"命令不仅会删除缓存,还会构建更新的缓存数据(预热),因此Symfony在第一次请求到来之前不必创建缓存,这就是它比使用"rm -rf"仅仅删除缓存文件需要更多时间的原因。即使您可以更快地完成该命令,如果您没有通过此命令预先创建缓存,那么处理第一个请求也会花费时间。

"

http://symfony.com/doc/current/console/usage.html

因此,在部署的整个过程中,通常最好运行cache:clear。 通常情况下,您会使用rm命令的场合只有在某些文件权限出现问题时(例如,可能您以错误的用户身份运行了命令),且已经没有其他选择。


4

你最好使用“官方”的最佳方法,即使用cache:clear而不是使用rm...遵循最佳实践,这里几乎包含所有命令:

  cache:clear                             Clears the cache
  cache:pool:clear                        Clears cache pools
  cache:warmup                            Warms up an empty cache
  doctrine:cache:clear-collection-region  Clear a second-level cache collection region.
  doctrine:cache:clear-entity-region      Clear a second-level cache entity region.
  doctrine:cache:clear-metadata           Clears all metadata cache for an entity manager
  doctrine:cache:clear-query              Clears all query cache for an entity manager
  doctrine:cache:clear-query-region       Clear a second-level cache query region.
  doctrine:cache:clear-result             Clears result cache for an entity manager

请在您的答案中添加一些解释,以便其他人可以从中学习。这个命令列表如何解释使用 rm 和其中任何一个命令之间的区别? - Nico Haase
我只是建议使用 cache: clear 命令来清除缓存,而不是使用 rm 命令。就这样。 - Mostafa
请在您的回答中执行此操作。您并没有提出任何建议,只是列出了一堆命令。 - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接