我正在使用 PHP 的 APC 来存储大量信息(使用apc_fetch()
等)。这些信息有时需要分析并转储到别处。
故事是这样的,我每秒有几百次点击。这些命中增加了各种计数器(与apc_inc()
,和朋友)。每小时,我都想遍历我积累的所有值,并对它们进行一些其他处理,然后将它们保存在磁盘上。
我可以在每个请求中作为随机或基于时间的切换来执行此操作,但这可能是一个很长的操作(可能需要 20-30 秒,如果不是几分钟的话),我不想将请求挂起那么久。
我认为一个简单的 PHP cronjob 可以完成这项任务。但是,我什至无法让它读回缓存信息。
<?php
print_r(apc_cache_info());
?>
产生一个看似不同的 APC 内存段,具有:
[num_entries] => 1
(单个条目似乎是其自身的操作码缓存)
虽然我的网络服务器由 nginx/php5-fpm 提供支持,但产生:
[num_entries] => 3175
因此,它们显然不共享同一块内存。如何在 CLI 脚本中访问相同的内存块(首选),或者如果这根本不可能,那么执行长时间运行的序列(例如每小时随机 HTTP 请求)绝对最安全的方法是什么?
对于后者,是否会register_shutdown_function()
立即使用 andset_time_limit(0)
来ignore_user_abort(true)
确保执行完成并且不会“挂起”任何人的浏览器?
是的,我知道 redis、memcache 等不会有这个问题,但我现在坚持使用 APC,因为它们都无法展示与 APC 相同的速度。