【问题标题】:How can I make a daemon cache a server response?如何使守护进程缓存服务器响应?
【发布时间】:2014-02-06 06:13:09
【问题描述】:

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

响应通常是

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

大部分时间。

有时,响应可能会变为

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

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

我的问题是,有没有办法以某种方式缓存此响应,而不是在守护程序级别一遍又一遍地到达终点?

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

【问题讨论】:

  • 所以你把它缓存在本地,那么你怎么知道它什么时候改变了?

标签: php daemon


【解决方案1】:

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

1 - 如果在 PHP

这里是如何保存一些随机文本(不管它是 JSON 还是对象,你都可以很好地检索它)

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

     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

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

【讨论】:

    【解决方案2】:

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

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

    缓存很简单:

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

    虽然您可能希望在其中添加一些额外的逻辑来使旧条目过期,但其他逻辑最终会占用内存直到事情消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多