【问题标题】:How can I get PHP to use the same APC cache when invoked on the CLI and the web?在 CLI 和 Web 上调用时,如何让 PHP 使用相同的 APC 缓存?
【发布时间】:2009-01-13 15:05:53
【问题描述】:

我正在使用APC 缓存用户变量(使用 apc_store/apc_fetch 命令)。我还使用选项“apc.enable_cli = 1”为 CLI 启用了 APC。但是,PHP 的 CLI 版本似乎访问了与 Apache 使用的版本不同的 APC 缓存。

是否可以将 APC 配置为对 CLI 和 Web 调用使用相同的缓存?

【问题讨论】:

    标签: php linux caching command-line-interface apc


    【解决方案1】:

    不可能.. 完成您所要求的事情的唯一方法是使用 memcacheD 之类的东西。或者运行你需要通过你的网络服务器运行的东西。哪些正在运行的 CLI 不能通过带有 cronjob 的 Web 脚本运行?

    【讨论】:

    • .. 或者更重要的是 - 为什么需要对 cli 脚本进行这种性能优化?
    • 非常正确.. 网络通常具有很高的影响力/点击率,并且 CLI 一次性调用。
    • 我不担心 APC 缓存 CLI 脚本。我希望能够从 Web 和 CLI 访问相同的 APC 用户缓存。如果不可能,我只需要从 CLI 调用一个 Web 脚本并让它传递所需的数据。不是最优雅的解决方案!
    • 引导我寻找这个问题的答案的用例是 apache 中的 APC 缓存存储了一个计算复杂的数据结构(从db 并将其打乱到我们访问的结构中)用于加速一堆页面。我有一个长期存在的脚本,它监视 memcached 以获取有关何时更新该结构的提示。基本上这是一个内存缓存的本地缓存。 (这看起来很疯狂,当你达到超大规模时,从内存缓存中获取一个大的静态对象的在线时间对于每次命中来说都是不可接受的。)
    • @cabbey 一点也不疯狂,由于往返,APC 比 memcache 快几个数量级。
    【解决方案2】:

    你可以使用 shm。该技术可用于访问 Unix 共享内存。您可以将一些变量放在 shm 中,然后放在另一个脚本中,甚至用另一种语言编写,您也可以获得共享变量。

    shm_put_var 和 shm_get_var。

    比APC慢,但比memcached、redis等快

    希望对你有帮助,对不起我的英语......

    【讨论】:

      【解决方案3】:

      将您的 CLI 称为 CGI /path-to/cgi-sys/php5.cgi /home/name/crons/engine.php

      【讨论】:

      • 好主意,但这对我在 CentOS (/usr/bin/php-cgi) 上不起作用
      • 这仅在您将 PHP 作为(快速)CGI 运行时才有效,而不是在 Apache 中使用 mod_php(因为 APC 在 Apache 进程的内存中)。
      【解决方案4】:

      您需要一个用 php 编写的 Web 服务器——APC 缓存仅由分叉的子进程共享。如果你有一个 php 网络服务器,你可以启动一个主 cli,初始化 apc,在一个子进程中 fork 和加载/运行 web 服务器,并在另一个子进程中 fork 和运行你的 php cli 脚本。有点恶心,呵呵。 fork 和 require(),我认为 apc 缓存不会在 exec() 中存活

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        • 2010-12-02
        相关资源
        最近更新 更多