我有一个在PHP中运行的守护程序脚本。此脚本不断访问端点并从资源获取响应并检查响应。
响应通常是
{"a": 1, "b": 2, "c": 3, "status" : "true"}
大部分时间。
有时,可能会发现响应可能会变为
{"a": 1, "b": 2, "c": 3, "status" : "false"}
我有逻辑来读取a,b和c的值,并根据它们执行操作。
我的问题是,有没有办法以某种方式缓存此响应,而不是在守护程序级别反复敲击终点?
或者有没有办法从服务器级别缓存json响应?
答案 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