如何清除用于生产的 Doctrine APC 缓存?

How to clear Doctrine APC cache for production?

当我向我的一个实体添加一列并将其发布用于生产时,我遇到了这个问题我必须重新启动 Apache 以清除 Doctrine 元数据 APC/APCU 缓存。

我已经尝试了下面的所有命令,但 none 对我有用:

php -r "apc_clear_cache();"
php -r "apcu_clear_cache();"

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

我收到关于 --env=prod 的错误消息

sudo php app/console doctrine:cache:clear-metadata  --env=prod
sudo php app/console doctrine:cache:clear-query  --env=prod
sudo php app/console doctrine:cache:clear-result --env=prod

 [LogicException]
  Cannot clear APC Cache from Console, its share in the Web server memory and not accessible from the CLI.

我可以让它刷新 Doctrine 缓存的唯一方法是重新启动我的 apache 服务器,这有时会成为一个问题。

我的 Symfony 项目中的 Doctine 缓存设置:

doctrine:
    orm:
        metadata_cache_driver: apc
        result_cache_driver: apc
        query_cache_driver: apc
        second_level_cache:
            enabled: true
            log_enabled: false
            region_cache_driver: apc

在这种情况下,我如何在每次向生产环境发布新架构更新时不重新启动 Apache 的情况下清除 APC 缓存。如果负载均衡器后面有很多服务器,情况会更糟。

与其尝试从控制台清除它,不如尝试从控制器或 app.php。

我在 app.php 中评论了这一行:

//apcu_clear_cache ();

当我确实需要清除缓存时,我只是取消注释并加载任何页面。对我有用。

查看 Smart-Core/AcceleratorCacheBundle 提供命令以从 CLI 清除 PHP 加速器缓存。

这可以允许将缓存作为 cli 命令刷新为:

php app/console cache:accelerator:clear

该文档还包括 Capifony 的食谱。

希望对您有所帮助

当你 运行 apc_clear_cache();不是来自 cli,而是来自您的应用程序,学说缓存将被清除。您可以在管理面板中制作一些按钮,或者在每次更新指定文件后向您的服务器发送 curl 请求,例如:

http://example.com/apc_cache_clear.php

内部自动请求并清除缓存

你必须明白Apache(或Nginx)下的Php 运行和命令行下的Php 运行是不一样的,它们是2Linux 无法通信的进程。

因此,即使您可以通过CLI 清除缓存,这也不会影响Apache 下的php。

最简单的方法是在 Symfony 控制器中调用 apcu_clear_cache,或者,您可以通过 CLI 使用 Apache Php 套接字。

我建议使用像 http://gordalina.github.io/cachetool/ 这样的工具,它可以完美地做到这一点。