当前位置: 首页 > 面试题库 >

在PHP中缓存JSON输出

钮巴英
2023-03-14
问题内容

有一点问题。一直在使用facebook和twitter
API并获取状态搜索查询的JSON输出没有问题,但是我进一步阅读并意识到,最终可能会受到文档中引用的“速率限制”。

我想知道每小时缓存JSON输出是否容易,以便至少可以尝试防止这种情况发生?如果是这样,怎么做?当我尝试一个youtube视频时,它并没有真正提供太多信息,只是如何将目录列表的内容写入到cache.php文件中,但是并没有真正指出这是否可以通过JSON输出完成,当然没有说如何使用60分钟的时间间隔,或者如何获取信息然后从缓存文件中退出。

任何帮助或代码都将不胜感激,因为关于此类问题的教程似乎很少。


问题答案:

这是一个简单的函数,它添加了缓存以获取一些URL内容:

function getJson($url) {
    // cache files are created like cache/abcdef123456...
    $cacheFile = 'cache' . DIRECTORY_SEPARATOR . md5($url);

    if (file_exists($cacheFile)) {
        $fh = fopen($cacheFile, 'r');
        $cacheTime = trim(fgets($fh));

        // if data was cached recently, return cached data
        if ($cacheTime > strtotime('-60 minutes')) {
            return fread($fh);
        }

        // else delete cache file
        fclose($fh);
        unlink($cacheFile);
    }

    $json = /* get from Twitter as usual */;

    $fh = fopen($cacheFile, 'w');
    fwrite($fh, time() . "\n");
    fwrite($fh, $json);
    fclose($fh);

    return $json;
}

它使用URL标识高速缓存文件,下一次将从高速缓存中读取对相同URL的重复请求。它将时间戳记写入高速缓存文件的第一行,并且丢弃早于一个小时的高速缓存数据。这只是一个简单的示例,您可能需要自定义它。



 类似资料:
  • 我一直在研究Redis(完全没有经验,只是研究了理论),在做了一些研究之后,发现它也被用作缓存。例如StackOverfolow it self。 有什么好处吗? 我试图直接浏览这个答案redis-cache-vs-using-memory-,但我想我没有得到答案中的关键行: “基本上,如果您需要您的应用程序在共享相同数据的几个节点上进行扩展,那么将需要类似Redis(或任何其他远程键/值存储)的

  • 问题内容: 我编写了一个简单的中继脚本,该脚本连接到网络摄像机并从套接字读取数据,并使用打印功能输出此数据。数据是已设置边界的MJPG数据。我只是输出读取的数据。 问题是PHP似乎正在缓冲这些数据。当我将相机设置为1 FPS时,Feed将冻结7-8秒,然后快速显示8帧。如果将分辨率设置为很大,则相机每秒将以大约1帧的速度移动。我认为那时正在发生一些缓冲(因为大尺寸的缓冲区会很快填充,而小尺寸的缓冲

  • 问题内容: 通过WSDL缓存所在的位置(),但我不一定知道删除以WSDL开头的所有文件是否安全。 是的,我 应该 能够从中删除所有内容,但是我不知道如果删除所有WSDL文件,这还会影响什么。 问题答案: 您可以安全地删除WSDL缓存文件。如果希望防止以后进行缓存,请使用: 或动态地:

  • 问题内容: 在装有PHP 5.5.3的新Macbook上安装MAMP。 重新加载和刷新无济于事。依然没有。Google过了几分钟,试图找出问题所在,然后回来刷新。有用。有没有搞错? 我进入php.ini并禁用了所有新的OPcache,并将默认缓存时间设置为0。向文档添加了标头以强制不进行缓存。还是同样的问题。这里到底发生了什么? 网络标签显示的是HTTP 200请求,因此文件中的任何新HTML都可

  • 问题内容: 我使用一些GeoIP服务在页面上放置国家/地区标记,具体取决于国家/地区IP。我需要为网站上的所有页面缓存JSON响应。 将此代码放入: 是否可以将其缓存?-似乎不起作用。 或者使用HTML5 localStorage可能更好,但是我不确定该怎么做。 我也尝试了JSONCache插件,但是对我来说不起作用。 问题答案: 您可以这样使用localStorage: 演示 因此,在您的特定情

  • 使用 APC 在一个标准的 PHP 环境中,每次访问PHP脚本时,脚本都会被编译然后执行。 一次又一次地花费时间编译相同的脚本对于大型站点会造成性能问题。 解决方案是采用一个 opcode 缓存。 opcode 缓存是一个能够记下每个脚本经过编译的版本,这样服务器就不需要浪费时间一次又一次地编译了。 通常这些 opcode 缓存系统也能智能地检测到一个脚本是否发生改变,因此当你升级 PHP 源码时