如何让守护进程缓存服务器响应?

时间:2014-01-17 02:56:17

标签: php daemon

我有一个在PHP中运行的守护程序脚本。此脚本不断访问端点并从资源获取响应并检查响应。

响应通常是

{"a": 1, "b": 2, "c": 3, "status" : "true"}

大部分时间。

有时,可能会发现响应可能会变为

{"a": 1, "b": 2, "c": 3, "status" : "false"}

我有逻辑来读取a,b和c的值,并根据它们执行操作。

我的问题是,有没有办法以某种方式缓存此响应,而不是在守护程序级别反复敲击终点?

或者有没有办法从服务器级别缓存json响应?

2 个答案:

答案 0 :(得分:0)

将对象的每个元素用作数组键:

$responses[$a][$b][$c]['status'] = true;

缓存很简单:

if (isset($responses[$a][$b][$c]['status'])) {
     ... used cached value
} else {
     ... compute new value and store in cache
}

虽然你可能想要一些额外的逻辑来使旧的条目过期,但其他的你最终会吸收内存,直到事情消失。

答案 1 :(得分:0)

如果你想从你的守护进程缓存响应,这里有一些选项

1 - 如果在PHP< 5.5,你可以使用apc的用户缓存

以下是保存一些随机文本的方法(如果它的JSON或对象无关紧要,你将能够很好地检索它)

    apc_add('cache_key',$save_this_var, TTL);

OR

     apc_store('cache_key',$save_this_var, TTL);
如果使用完全相同的密钥保存其他内容,

apc_add将不会覆盖,而apc_store将覆盖 TTL是您要缓存

数据的时间(以秒为单位)

现在您可以像这样检索缓存

     $my_cache = apc_fetch('cache_key');

$ my_cache包含您之前保存的变量

2 - 如果您使用的是PHP 5.5,那么通过添加apcu模块来使用apc的用户缓存,它的工作方式与我上面解释的apc缓存完全相同,只是名称更改(apcu不缓存操作码而PHP中的apc< 5.4确实)

3 - 如果您处于云端或多服务器环境中,您也可以使用memcached,但如果在单机上,我会使用apc或apcu